Меню Android на ОпцииВыбранныеВыбранные пункты меню стиля
Я пытаюсь выделить заголовок пункта меню, когда он выбран на панели действий, и отобразить соответствующий вид в фрагменте ниже. Загрузка фрагментов работает хорошо, но я не могу стилизовать пункты меню, когда они нажимаются.
То, что я хотел бы иметь что-то вроде ниже упомянутых методов
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// item.setSiblingsStyle(R.style.passive_menu_item);
// item.setStyle(R.style.active_menu_item);
}
Можно ли стилизовать заголовок меню в методе " onOptionsItemSelected "? Пожалуйста помоги!
2 ответа
Я решил, что использование только текста не очень хороший способ. Поэтому я решил добавить значки и использовать состояние элементов для переключения, поддерживая несколько переменных. Вот реализация:
private current_selected_menu;
private main_menu;
public void updateMenuState(){
if (main_menu==null){
return;
}
int sz = main_menu.size();
for(int i=0;i<sz;i++){
if(main_menu.getItem(i).getItemId()==current_selected_menu){
main_menu.getItem(i).setEnabled(false);
}
else{
main_menu.getItem(i).setEnabled(true);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.sample_menu, menu);
current_selected_menu = menu.getItem(0).getItemId(); // I'm using first item as enabled by default
main_menu = menu;
int sz = menu.size();
for(int i=0;i<sz;i++){
if(menu.getItem(i).getItemId()==current_selected_menu){
menu.getItem(i).setEnabled(false);
}
else{
menu.getItem(i).setEnabled(true);
}
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
// Do something
current_selected_menu = item.getItemId();
updateMenuState();
return true;
case R.id.item2:
// Do something
current_selected_menu = item.getItemId();
updateMenuState();
return true;
default:
// Do Something
return super.onOptionsItemSelected(item);
}
}
Как предполагает Xingchen, можно использовать селекторы для определения нескольких значков. Ниже приведен пример реализации:
Файлicon_selector.xml в res / drawable:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/icon_passive" android:state_enabled="false"/>
<item android:drawable="@drawable/icon_active" android:state_enabled="true"/>
</selector>
Примечание: icon_passive.png и icon_active.png - это два файла изображения, используемые в качестве значков.
Файлsample_menu.xml в res / menu:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu1" android:icon="@drawable/icon_selector" android:title="menu1" android:showAsAction="always|withText" android:visible="true"></item>
<item android:id="@+id/menu2" android:icon="@drawable/icon_selector" android:title="menu2" android:showAsAction="always|withText" android:visible="true"></item>
<item android:id="@+id/menu3" android:icon="@drawable/icon_selector" android:title="menu3" android:showAsAction="always|withText" android:visible="true"></item>
</menu>
Я чувствую, что могут быть лучшие способы, чем упомянуто выше. Я буду держать это открытым. Пожалуйста, не стесняйтесь предлагать лучшие решения или лучшие практики:)
Вы можете попробовать использовать определение селектора:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
<item android:state_pressed="true" android:color="@color/blue_light"/> <!-- pressed -->
<item android:state_enabled="false" android:color="@color/grey_cloud"/> <!-- focused -->
<item android:color="@color/black"/> <!-- default -->
</selector>