有針對相同的功能on Blackberry提到這個bug(這已被儘可能我可以告訴關閉,但未得到解決)了幾個不同的線程問題,而且,但我還沒有爲Android找到一個特別。是否有可能在Android中變灰(而不僅僅是禁用)MenuItem?
,我號召基於一些國家一定的MenuItems setEnabled(false)
,但它們在視覺上看起來是一樣的。我希望它們以某種方式偏移,以便用戶知道該選項目前不可用 - 是否有任何方法可以做到這一點?
有針對相同的功能on Blackberry提到這個bug(這已被儘可能我可以告訴關閉,但未得到解決)了幾個不同的線程問題,而且,但我還沒有爲Android找到一個特別。是否有可能在Android中變灰(而不僅僅是禁用)MenuItem?
,我號召基於一些國家一定的MenuItems setEnabled(false)
,但它們在視覺上看起來是一樣的。我希望它們以某種方式偏移,以便用戶知道該選項目前不可用 - 是否有任何方法可以做到這一點?
我有同樣的問題。有得到這個工作的方式有兩種:
我現在用什麼來使用。改變自己的東西像這樣的圖標,onPrepareOptionsMenu()
:
public boolean onPrepareOptionsMenu(Menu menu) {
boolean menusEnabled = reachedEndOfSlidehow(); // enable or disable?
MenuItem item = menu.findItem(R.id.menu_next_slide);
Drawable resIcon = getResources().getDrawable(R.drawable.ic_next_slide);
if (!menusEnabled)
resIcon.mutate().setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN);
item.setEnabled(menusEnabled); // any text will be automatically disabled
item.setIcon(resIcon);
}
可以調用invalidateOptionsMenu()
(或ABS,supportInvalidateOptionsMenu()
)重建菜單。
編輯:更新的解決方案2
來源:https://groups.google.com/forum/?fromgroups#!topic/actionbarsherlock/Z8Ic8djq-3o
看一看這個link
setEnabled
也可用於MenuItems
。
呀,我用的setEnabled,但它不會在視覺上改變它。 – 2012-03-10 04:08:58
嘗試下面的代碼 public boolean onCreateOptionsMenu(Menu menu){ \t \t menu.add(0,1,1,「Test」)。setEnabled(false); \t \t return super.onCreateOptionsMenu(menu); \t} – Pavandroid 2012-03-10 04:29:43
這對我來說工作得很好。 – Pavandroid 2012-03-10 05:34:52
上API Level < 14
setEnabled(false)
工作正常,但在14
項目仍然點擊。
在所有的Android版本,最簡單的方式來使用它來顯示一個菜單操作圖標爲禁用,並使其功能被禁用,以及:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_my_item);
if (myItemShouldBeEnabled) {
item.setEnabled(true);
item.getIcon().setAlpha(255);
} else {
// disabled
item.setEnabled(false);
item.getIcon().setAlpha(130);
}
}
我發現了一種新的方式來解決這個問題,採用可拉伸性選擇器xml文件。你只需創建一個你想在你的菜單項使用的圖標選擇,那麼你可以更改位圖的色彩,字母或兩個:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<bitmap android:src="@drawable/ic_menu_item"
android:tint="@color/enabled_color"
android:alpha="@integer/enabled_alpha"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/ic_menu_item"
android:tint="@color/disabled_color"
android:alpha="@integer/disabled_alpha"/>
</item>
</selector>
作爲一個側面說明;我喜歡將顏色設置爲啓用狀態爲"?android:attr/textColorPrimary"
,禁用狀態爲"?android:attr/textColorHint"
。這樣它將根據所使用的主題進行調整。
然後,你可以設置圖標在菜單的xml文件來選擇資源:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_action"
android:orderInCategory="0"
android:title="@string/title_menu_action"
android:icon="@drawable/ic_menu_item_selector"
app:showAsAction="ifRoom"/>
</menu>
然後當你調用item.setEnabled(enabled)
顏色和/或圖標的阿爾法將隨而變化州!
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemBackground="@color/white"
android:background="@color/white"
app:itemTextColor="@color/menu_text_color"
app:itemIconTint="@color/menu_text_color"
app:menu="@menu/main_drawer" />
和「@color:
此解決方案僅適用於Android 5.0+(API 21+)棒棒糖及更高版本,因此setColorFilter在早期版本中是必需的。 – straya 2016-08-19 04:59:28
我做到了,是在NavigationView使用「itemIconTint」的方式,也可以通過使用「itemTextColor」
這是Navigationview變灰文本/ menu_text_color」是一個選擇:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/primaryColor" />
<item android:state_enabled="false" android:color="@color/disabled_text_color" />
<item android:color="@color/primaryText" />
</selector>
最後,如果你想禁用菜單項,
MenuItem item = mNavigationView.getMenu().findItem(R.id.your_menu_item);
item.setEnabled(isEnable);
完成!
這裏有一個簡單的方法來做到這一點(使用科特林):
fun changeMenuItemColour(enabled: Boolean) {
var menuItem = SpannableString(mCustomToolbar?.menu?.findItem(R.id.some_menu_item)?.title)
var style = activity?.resources?.getColor(R.color.darkGraphite)!!
if (enabled) style = activity?.resources?.getColor(R.color.black)!!
menuItem.setSpan(ForegroundColorSpan(style), 0, menuItem.length, 0)
}
接受並刪除了我自己的答案。 – 2012-06-04 22:34:25
這是否實際上改變了菜單項文本/標題的顏色?也就是說,它會變成灰色嗎?從我的理解,這隻會影響圖標。如果你沒有圖標,只有文字會怎麼樣? – 2012-11-07 02:25:38
調用item.setEnabled()已經使文本變灰。問題是,在操作欄上文本變灰,但圖標不是 - 此代碼灰色。 – 2012-11-07 06:57:25