11-dars. Androidda menularni guruhlash, xml menu yaratish.

Bundan oldingi 10-darsimizda androidda oddiy menu yaratishni o’rgangan edik. Ushbu darsimizda esa menularni guruhlash va guruhlashning avzalliklarini o’rganib chiqamiz. Bizning appimizda 6 ta menuyimiz bor, lekin biz ko’pincha menulardan 3 tasini judda ko’p foydalanamiz. Demak biz foydalanuvchiga qulay bo’lishi maqsadida menu tugmasi bosilganda 3 ta menuyimiz hosil bo’lsin. Bizda checkbox ham mavjud bo’ladi chek boximizni kengaytirilgan menu deb ataylik. CheckBox true qiymatini olgan vaqtda menu tugmasi bosganda 6 ta menuyimiz ham ko’rinsin false holatda esa 3 ta menuyimiz ko’rinsin.
Demak asosiy ishga o’tamiz.
Yangi loyiha hosil qilamiz.
Application name: AndroidMenuID
Project Name: AndroidMenuID
Package Name: uz.projects.androidmenuid
Target SDK: API 17 Android 4.2(Jelly Bean)
Create Activity: MainActivity
Activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chbExtMenu"
android:text="Kengaytirilgan menu">
</CheckBox>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textView">
</TextView>
</LinearLayout>
Ko’p ishlatiladigan menularimiz:
1. Qo’shish
2. Tahrirlash
3. O’chirish
Keyingi menularimiz:
1. Nusxalash
2. Joylashtirish
3. Chiqish.
onCreateOptionsMenu metodimizning kiruvchi parametiriga Menu classimizning menu obyektini beramiz va ushbu metod ichida menu obyektimizning add metodi orqaliy menuga guruh Idsi,menu idsi joylashish tartibi, va uning nomi ni beramiz ya’ni:
add(int groupId, int itemId, int order,CharSequence title)
— groupId – Guruh idsi
— itemId — menu idsi
— order — joylashish tartib indexsi
— title-Menuning nomi
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
menu.add(0, 1, 0, "Qo'shish");
menu.add(0, 2, 0, "Tahrirlash");
menu.add(0, 3, 3, "O'chirish");
menu.add(1, 4, 1, "Nusxalash");
menu.add(1, 5, 2, "Joylashtirish");
menu.add(1, 6, 4, "Chiqish");
return super.onCreateOptionsMenu(menu);
}
onPrepareOptionsMenu – bu metodimizga har doim murojat etib turamiz va bizning menularimizni k’rinish doirasini amalga oshirishimizda yordom beradi. Ushbu metodning kiruvchi parametiriga Menu classimizning menu obyektini qiymat qilib beramiz va metodda menu obyektimizning setGroupVisible metodini chaqiramiz. setGroupVisible metodimizning ham ikkita kiruvchi parametiri bor birinchisi: guruh idisi, ikkinchi Boolean qiymat.
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// agar chekbox qiymati tekshiriladi va boolean qiymat qaytaradi
menu.setGroupVisible(1, chb.isChecked());
return super.onPrepareOptionsMenu(menu);
}
Endi esa bizning menuyimiz bosilganligi va uning guruh idsini chiqaraylik.
Bunda onOptionsItemSelected metodi menularning click hodisasini amalga oshirishimizda yordom beradi.
Ushbu metodning ham kiruvchi parametirga Menu classimizning menu obyektini beramiz.
String turudagi ma’lumotlarni chiqarganimiz uchun StringBuilder classining obyektini yaratib uning append metod orqaliy yangi qator qo’shib ma’lumotlarimizni chiqaramiz.
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
sb.append("Item Menu");
sb.append("\r\n guruhId: " + String.valueOf(item.getGroupId()));
sb.append("\r\n Menu nomi: " + item.getTitle());
tv.setText(sb.toString());
return super.onOptionsItemSelected(item);
}
Yozgan appimizni tekshirib ko’ramiz:
Odatiy menuda:

Kengaytirilgan menyuda

Tahrirlash menusi bosilgandagi holat:

Full code:
package uz.projects.androidmenuid;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CheckBox;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv;
CheckBox chb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView);
chb = (CheckBox) findViewById(R.id.chbExtMenu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
menu.add(0, 1, 0, "Qo'shish");
menu.add(0, 2, 0, "Tahrirlash");
menu.add(0, 3, 3, "O'chirish");
menu.add(1, 4, 1, "Nusxalash");
menu.add(1, 5, 2, "Joylashtirish");
menu.add(1, 6, 4, "Chiqish");
return super.onCreateOptionsMenu(menu);
}
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// agar chekbox qiymati tekshiriladi va boolean qiymat qaytaradi
menu.setGroupVisible(1, chb.isChecked());
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
sb.append("Item Menu");
sb.append("\r\n guruhId: " + String.valueOf(item.getGroupId()));
sb.append("\r\n title: " + item.getTitle());
tv.setText(sb.toString());
return super.onOptionsItemSelected(item);
}
}
Androidda XML menu yaratish.
Menu yaratishning yana biro oson yo’li mavjud. Bu yo’l xml fayllardan foydalanish orqaliydir.
res/menu papkasida mymenu.xml faylini yaratamiz.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
</menu>
Menu teglari ichiga item tegini qo’shilb uning id va title lariga qiymat beramiz:
<item
android:id="@+id/menu_add"
android:title="Qo’shish">
</item>
yuqoridagi keltirganimiz kabi boshqa menularni ham kiritamiz:
Bizning mymenu.xml faylimiz quydagicha ko’rinish oldi:
<item
android:id="@+id/menu_add"
android:title="qoshish">
</item>
<item
android:id="@+id/menu_edit"
android:title="tahrirlash">
</item>
<item
android:id="@+id/menu_delete"
android:title="O'chirish">
</item>
Endi esa qolgan menularni guruhlash orqali kiritamiz bunda bizga group tegi yordom beradi. Group tegini idisini ko’rsatamiz va item tegi orqali menularni kiritamiz. orderInCategory orqaliy menularni tartiblaymiz.
<group
android:id="@+id/guruh1"
>
<item
android:id="@+id/nusxalash"
android:title="Nusxalash"
android:orderInCategory="1" >
</item>
<item
android:id="@+id/joylashtirish"
android:title="joylashtirish"
android:orderInCategory="1" >
</item>
<item
android:id="@+id/exit"
android:title="Chiqish"
android:orderInCategory="1" >
</item>
</group>
Xullas:
item bu menu puktlari.
Id bu menu idsi
Title bu menu tekisti
orderInCategory bu tartiblash.
Group bu guruhlash
Endi OncreateOptionsMenu metodimizga o’tamiz va getMenuInflater() metodining inflate() metodini chaqiramiz va unga ikkita kiruvchi parameter beramiz. Birinchisi guruh idsi, ikkinchisi Menu obyekti.
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.mymenu, menu);
return super.onCreateOptionsMenu(menu);
}
Guruh idsini berishda R classidan foydalanamiz va R.id.guruh1 quydagicha:
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// agar chekbox qiymati tekshiriladi va boolean qiymat qaytaradi
menu.setGroupVisible(R.id.guruh1, chb.isChecked());
return super.onPrepareOptionsMenu(menu);
}
Menularni xml orqali yaratishni tavsiya etgan bo’lardim. Buning avzalligi sizning classingizda kodlarni qisqarishidir.
Full code:
Mymenu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_add"
android:title="qoshish">
</item>
<item
android:id="@+id/menu_edit"
android:title="tahrirlash">
</item>
<item
android:id="@+id/menu_delete"
android:title="O'chirish">
</item>
<group
android:id="@+id/guruh1"
>
<item
android:id="@+id/nusxalash"
android:title="Nusxalash"
android:orderInCategory="1" >
</item>
<item
android:id="@+id/joylashtirish"
android:title="joylashtirish"
android:orderInCategory="1" >
</item>
<item
android:id="@+id/exit"
android:title="Chiqish"
android:orderInCategory="1" >
</item>
</group>
</menu>
10-dars. Androidda oddiy menu yaratish.
Maqolani yozishda startandroid.ru saytidan foydalanildi.
8 комментариев