Отключить кнопку панели действий в Android
Можно ли отключить кнопку в панели действий в Android? Я смотрел вокруг, и я не мог найти фрагмент кода для этого, я думал, что должен быть простой способ.
Ответы
Ответ 1
-
После выполнения действия пользователя, когда вы хотите отключить панель действий, установите некоторый флаг, скажем disableButtonFlag
.
-
Вызов invalidateOptionsMenu()
. Это вызовет вызов onCreateOptionsMenu
для восстановления вашего меню.
-
Наконец, измените свой onCreateOptionsMenu
, чтобы отключить нужную кнопку в зависимости от состояния disableButtonFlag
.
if (disableButtonFlag) {
menu.findItem(R.id.your_item).setEnabled(false);
} else {
menu.findItem(R.id.your_item).setEnabled(true);
}
Или проще:
menu.findItem(R.id.your_item).setEnabled(!disableButtonFlag);
Ответ 2
Для разработчиков Android, которые используют пользовательские кнопки ActionBar
i.e(Сохранить и отменить действие), я попробовал следующий код, чтобы отключить кнопку "Отменить действие" следующим образом:
Java-код:
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View actionBarButtons = inflater.inflate(
R.layout.edit_event_custom_actionbar, new LinearLayout(this),
false);
View cancelActionView = actionBarButtons
.findViewById(R.id.action_cancel);
cancelActionView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
cancelActionView.setEnabled(false);
View doneActionView = actionBarButtons.findViewById(R.id.action_done);
doneActionView.setOnClickListener(new OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
getActionBar().setDisplayShowHomeEnabled(false);
getActionBar().setDisplayShowTitleEnabled(false);
getActionBar().setDisplayShowCustomEnabled(true);
this.getActionBar().setCustomView(actionBarButtons);
edit_event_custom_actionbar.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?attr/dividerVertical"
android:dividerPadding="12dp"
android:orientation="horizontal"
android:showDividers="middle" >
<!-- id must match corresponding menu item id -->
<TextView
android:id="@+id/action_cancel"
style="@style/EditEventCustomActionButton"
android:text="@string/cancel_label"
android:drawableLeft="@drawable/ic_action_cancel" android:padding="5dp" />
<!-- id must match corresponding menu item id -->
<TextView
android:id="@+id/action_done"
style="@style/EditEventCustomActionButton"
android:text="@string/abc_action_mode_done"
android:drawableLeft="@drawable/abc_ic_cab_done_holo_dark" android:paddingRight="5dp" />
</LinearLayout>
И добавьте этот код в свой /values/styles.xml:
<style name="EditEventCustomActionButton" parent="android:style/Widget.Holo.Light.ActionButton">
<item name="android:layout_height">match_parent</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:focusable">true</item>
<item name="android:textColor">#FFFFFF</item>
</style>
Ответ 3
Вы можете сделать что-то вроде этого:
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
menu.findItem(R.id.your_item).setEnabled(false);
return super.onCreateOptionsMenu(menu);
}
Ответ 4
Простым способом отключения кнопки на панели действий является сохранение ссылки на меню в onCreateOptionsMenu()
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
mMenu = menu; // Save reference
return super.onCreateOptionsMenu(menu);
}
а затем вызовите setEnabled()
в элементе меню, чтобы включить или отключить:
mMenu.findItem(R.id.my_action_item).setEnabled(false);
Не нужно заново создавать меню, вызывая invalidateOptionsMenu()
.