Android 更改弹出菜单的背景颜色
Android change background color of popup menu
我不明白为什么更改 android 应用程序的颜色如此痛苦。
我尝试了几种方法来更改操作栏中弹出菜单的背景颜色,但都没有成功。
我正在使用 AppTheme.NoActionBar 来设置操作栏的样式。
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="navigationIcon">@drawable/ic_return_dark</item>
<item name="overlapAnchor">false</item>
<item name="popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@color/color4</item>
</style>
根据我找到的示例,您需要在自定义样式(在我的例子中 AppTheme.NoActionBar)中插入一个自定义 popupMenuStyle 为了自定义 popupBackground,改变弹出菜单的背景颜色。
没用。
如何更改弹出菜单的背景颜色?
要更改 Android 中选项菜单的颜色,更改主题和样式将无济于事。您必须初始化 LayoutInflater Factory Class.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu);
getLayoutInflater().setFactory(new Factory() {
@Override
public View onCreateView(String name, Context context,
AttributeSet attrs) {
if (name .equalsIgnoreCase(“com.android.internal.view.menu.IconMenuItemView”)) {
try {
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
view.setBackgroundResource(R.drawable.your_color);
((TextView) view).setTextColor(Color.your_color);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {
}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}
如果还有人想知道这个问题有没有更好的解决办法,这里是解释和答案。
因为问题中明确提到应用使用NoActionBar主题,将popupMenu直接设置为AppTheme是行不通的。
相反,您需要将该主题手动应用到 xml
中的工具栏
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/PopupMenu" />
并在您的 styles.xml 文件中
<style name="PopupMenu" parent="Theme.AppCompat.Light">
<item name="android:textColor">@color/white</item>
<item name="android:colorBackground">@color/popup_color</item>
</style>
我不明白为什么更改 android 应用程序的颜色如此痛苦。 我尝试了几种方法来更改操作栏中弹出菜单的背景颜色,但都没有成功。
我正在使用 AppTheme.NoActionBar 来设置操作栏的样式。
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="navigationIcon">@drawable/ic_return_dark</item>
<item name="overlapAnchor">false</item>
<item name="popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@color/color4</item>
</style>
根据我找到的示例,您需要在自定义样式(在我的例子中 AppTheme.NoActionBar)中插入一个自定义 popupMenuStyle 为了自定义 popupBackground,改变弹出菜单的背景颜色。 没用。
如何更改弹出菜单的背景颜色?
要更改 Android 中选项菜单的颜色,更改主题和样式将无济于事。您必须初始化 LayoutInflater Factory Class.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu);
getLayoutInflater().setFactory(new Factory() {
@Override
public View onCreateView(String name, Context context,
AttributeSet attrs) {
if (name .equalsIgnoreCase(“com.android.internal.view.menu.IconMenuItemView”)) {
try {
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
view.setBackgroundResource(R.drawable.your_color);
((TextView) view).setTextColor(Color.your_color);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {
}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}
如果还有人想知道这个问题有没有更好的解决办法,这里是解释和答案。
因为问题中明确提到应用使用NoActionBar主题,将popupMenu直接设置为AppTheme是行不通的。
相反,您需要将该主题手动应用到 xml
中的工具栏<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/PopupMenu" />
并在您的 styles.xml 文件中
<style name="PopupMenu" parent="Theme.AppCompat.Light">
<item name="android:textColor">@color/white</item>
<item name="android:colorBackground">@color/popup_color</item>
</style>