Android
Меню
Поиск…
Синтаксис
- inflater.inflate (R.menu.your_xml_file, меню);
параметры
параметр | Описание |
---|---|
inflate(int menuRes, Menu menu) | Наполните иерархию меню из указанного ресурса XML. |
getMenuInflater () | Возвращает MenuInflater с этим контекстом. |
onCreateOptionsMenu (Menu menu) | Инициализируйте содержимое меню стандартных параметров Activity. Вы должны поместить элементы меню в меню. |
onOptionsItemSelected (MenuItem item) | Этот метод вызывается всякий раз, когда выбран пункт в меню параметров. |
замечания
Чтобы узнать больше о меню , прочтите это . Надеюсь, поможет!
Меню опций с разделителями
В Android есть меню параметров по умолчанию, которое может принимать несколько параметров. Если необходимо отобразить большее количество параметров, то имеет смысл группировать эти параметры, чтобы сохранить ясность. Параметры можно группировать, помещая между ними разделители (то есть горизонтальные линии). Чтобы разрешить разделители, можно использовать следующую тему:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="android:divider">@color/black</item>
<item name="android:dividerHeight">1dp</item>
</style>
Изменив тему, в меню можно добавить разделители.
Применить пользовательский шрифт в меню
public static void applyFontToMenu(Menu m, Context mContext){
for(int i=0;i<m.size();i++) {
applyFontToMenuItem(m.getItem(i),mContext);
}
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
if(mi.hasSubMenu())
for(int i=0;i<mi.getSubMenu().size();i++) {
applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
}
Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
SpannableString mNewTitle = new SpannableString(mi.getTitle());
mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mi.setTitle(mNewTitle);
}
а затем в Управлении:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
applyFontToMenu(menu,this);
return true;
}
Создание меню в действии
Чтобы определить свое собственное меню, создайте XML-файл в каталоге res/menu/
вашего проекта и создайте меню со следующими элементами:
-
<menu>
: Определяет Меню, в котором хранятся все пункты меню. -
<item>
: Создает MenuItem, который представляет один элемент в меню. Мы также можем создать вложенный элемент для создания подменю.
Шаг 1:
Создайте свой собственный XML-файл следующим образом: В res/menu/main_menu.xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/aboutMenu"
android:title="About" />
<item
android:id="@+id/helpMenu"
android:title="Help" />
<item
android:id="@+id/signOutMenu"
android:title="Sign Out" />
</menu>
Шаг 2:
Чтобы указать меню параметров, переопределите onCreateOptionsMenu()
в своей деятельности .
В этом методе вы можете раздуть свой ресурс меню (определенный в вашем файле XML, то есть res/menu/main_menu.xml
)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
Когда пользователь выбирает элемент из меню параметров, система вызывает переопределенный onOptionsItemSelected()
вашей активности .
- Этот метод передает выбранный MenuItem.
- Вы можете идентифицировать элемент, вызвав
getItemId()
, который возвращает уникальный идентификатор элемента меню (определяемыйandroid:id attribute
в ресурсе меню -res/menu/main_menu.xml
) * /
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "Clicked on Sign Out!");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Обертывание!
Код вашей Activity
должен выглядеть следующим образом:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "mytag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "User signed out");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}