Android 更改单个项目菜单的背景色

Android 更改单个项目菜单的背景色,android,menu,Android,Menu,我想要这样的弹出菜单 点击按钮后显示 XML 我想为每个项目设置不同的背景色。我设置了android:drawable,但这不起作用 我可以用这个代码可以改变文字颜色,但我不知道如何可以改变项目的背景色 Menu menu=popup.getMenu(); MenuItem item = menu.getItem(0); SpannableString s = new SpannableString("My red MenuItem"); s.setSpan(new Foreground

我想要这样的弹出菜单

点击按钮后显示

XML

我想为每个项目设置不同的背景色。我设置了android:drawable,但这不起作用

我可以用这个代码可以改变文字颜色,但我不知道如何可以改变项目的背景色

 Menu menu=popup.getMenu();
MenuItem item = menu.getItem(0);
SpannableString s = new SpannableString("My red MenuItem");
s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
        item.setTitle(s);

如果您想使用
item
标记并执行此操作,作为替代方法您可以尝试
backgroundcolorsspan
并编写逻辑以重新格式化字符串的长度

s.setSpan(new BackgroundColorSpan(Color.RED), 0, s.length(), 0);
输出


否则

如果我这样做,我将创建一个没有标题的
对话框

private Dialog fakeDialogUseInstedOfMenuItem;


fakeDialogUseInstedOfMenuItem = new Dialog(MainActivity.this);
fakeDialogUseInstedOfMenuItem.requestWindowFeature(Window.FEATURE_NO_TITLE); // no Title
fakeDialogUseInstedOfMenuItem.setContentView(R.layout.my_custom_view);
并根据需要设置固定或滚动视图

my_custom_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="200dp"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#789"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/first_lin"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:gravity="center">

                <TextView

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Option One"
                    android:textColor="#000"
                    android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FFF"
                android:gravity="center">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Option Two"
                    android:textColor="#000"
                    android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"></LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FFF"></LinearLayout>
        </LinearLayout>
    </ScrollView>


</LinearLayout>
输出:


但这些都是可选的方法

此代码只更改文本的背景颜色,不更改项目的整个宽度。@chat kai yes!这就是为什么我说要保留它作为替代,并重新格式化字符串的大小,以保持所有项目的大小相同。现在,您知道,如何重新格式化此大小字符串,使其具有相同大小的项目?使用代码创建此项目,获取最大大小字符串,决定要分配的空间大小,根据字符串的大小获取其他字符串的大小与最大值相比,增加一个边所需的空间数量创建新字符串并加载它们今天我学到了一堂课试图在这里提供帮助>算法已经足够了我告诉过你逻辑思考并实现它。如果你不喜欢,请找到其他东西:)
private Dialog fakeDialogUseInstedOfMenuItem;


fakeDialogUseInstedOfMenuItem = new Dialog(MainActivity.this);
fakeDialogUseInstedOfMenuItem.requestWindowFeature(Window.FEATURE_NO_TITLE); // no Title
fakeDialogUseInstedOfMenuItem.setContentView(R.layout.my_custom_view);
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="200dp"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#789"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/first_lin"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:gravity="center">

                <TextView

                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Option One"
                    android:textColor="#000"
                    android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FFF"
                android:gravity="center">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Option Two"
                    android:textColor="#000"
                    android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"></LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#FFF"></LinearLayout>
        </LinearLayout>
    </ScrollView>


</LinearLayout>
LinearLayout linearLayoutOneInDialog = (LinearLayout) fakeDialogUseInstedOfMenuItem.findViewById(R.id.first_lin);