更改背景颜色单项菜单

时间:2016-12-29 17:41:11

标签: android menu

我想要这样的弹出菜单

enter image description here

点击按钮后显示它

XML

    <item

        android:state_pressed="true"
        android:id="@+id/fromFirstMonth"
        android:title="از ابتدای سال"
        android:drawable="@drawable/nav_item_background"/>
    <item
        android:state_pressed="true"
        android:id="@+id/currentMonth"
        android:title="این ماه"
        android:drawable="@color/blueMenu"/>
    <item
        xmlns:showAsAction="always"
        android:id="@+id/currentSession"
        android:title="این فصل"

        android:drawable="@color/white"/>
    <item
        xmlns:showAsAction="always"
        android:id="@+id/selection"
        android:title="تانتخابی"
        android:drawable="@color/blueMenu"/>

</menu>

爪哇

   hourglass.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Creating the instance of PopupMenu
                PopupMenu popup = new PopupMenu(Products.this, hourglass);
                //Inflating the Popup using xml file
                popup.getMenuInflater().inflate(R.menu.hourglass_item, popup.getMenu());

                //registering popup with OnMenuItemClickListener
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        Toast.makeText(Products.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();
                        return true;
                    }
                });

                popup.show();//showing popup menu


            }
        });

我想为每个项目设置不同的背景颜色。我设置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);

1 个答案:

答案 0 :(得分:1)

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

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

输出

enter image description here

其他

如果我这样做,我会在没有标题的情况下创建一个Dialog

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>

并访问此类商品,

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

out put:

enter image description here

但这些东西是可选的方式