gpt4 book ai didi

android - 无论上下文模式是否打开,操作栏项目的样式都不同?

转载 作者:太空狗 更新时间:2023-10-29 13:26:38 26 4
gpt4 key购买 nike

我的用例是这样的:默认操作栏显示蓝色背景,我希望按钮在按下时变为绿色;另一方面,上下文操作栏是绿色的,我希望按钮在按下时变为蓝色。 (有点反色)

  • 默认操作栏:蓝色背景,绿色覆盖(按下状态)
  • 上下文操作模式:绿色背景,蓝色覆盖(按下状态)

我已经有了选择器,我可以在我的主题中设置 android:actionBarItemBackground 来为两种 模式设置可绘制对象。我还可以在 android:actionModeCloseButtonStyle 中设置关闭按钮的样式,效果很好。

那我该如何设置其他按钮的样式呢?

谢谢大家,吉尔

最佳答案

正如我在评论中所说,MenuItems 的 View 不可访问,因此您没有任何直接选项来访问它们。为这些 MenuItems 替换选择器的一种方法是使用 MenuItems 并将操作 View 设置为 ImageViews 以保留普通图标并更改选择器那些 ImageViews。下面是一个例子:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuFirst"
android:showAsAction="always"
android:actionLayout="@layout/image_menu_layout"/>
</menu>

<!-- image_menu_layout.xml -->
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/Widget.ActionButton"/>

ActionBar 部分的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.your_menu, menu);
// call this for any menu item that you might have
setUpMenuItem(menu, R.id.menuFirst, false, null);
return super.onCreateOptionsMenu(menu);
}

/**
* This methods set up the MenuItems.
*
* @param menu the menu reference, this would refer either to the menu of the ActionBar or
* the menu of the ActionMode
* @param itemId the id of the MenuItem which needs work
* @param onActionMode flag to indicate if we're working on the ActionBar or ActionMode
* @param modeRef the ActionMode reference(only when the MenuItem belongs to the ActionMode,
* null otherwise)
*/
private void setUpMenuItem(Menu menu, int itemId, final boolean onActionMode,
final ActionMode modeRef) {
final MenuItem menuItem = menu.findItem(itemId);
ImageView itemLayout = (ImageView) menuItem.getActionView();
itemLayout.setBackgroundResource(onActionMode ? R.drawable.selector_for_actionmode : R
.drawable.selector_for_actionbar);
itemLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// for simplicity, wire up the normal selection callbacks(if possible,
// meaning the Activity implements the ActionMode.Callback)
if (onActionMode) {
onActionItemClicked(modeRef, menuItem);
} else {
onOptionsItemSelected(menuItem);
}
}
});
}

ActionMode 部分的代码:

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getMenuInflater().inflate(R.menu.actiomode_menu, menu);
// call this for any menu item that you might have
setUpMenuItem(menu, R.id.menu_item_from_actionmode, true, mode);
return true;
}

此方法还允许您避免在使用 Activity 时处理/保持 ActionBar/ActionMode 的状态.

关于android - 无论上下文模式是否打开,操作栏项目的样式都不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com