【问题标题】:Popup menu style issue弹出菜单样式问题
【发布时间】:2016-11-21 16:03:44
【问题描述】:

我正在开发一个应用程序,其中有一个列表和一个弹出菜单。但我的应用程序有黑色背景颜色和文本颜色是白色的。但是我的弹出菜单背景颜色是白色,文本颜色是白色。我已经尝试了所有可能的方法,但它不起作用。这是我的代码。

样式.xml

<attr name="iconColor" format="reference" />
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/back_color</item>
    <item name="colorPrimaryDark">@android:color/holo_orange_dark</item>
    <item name="android:textColor">@color/White</item>

    <item name="android:textSize">12dp</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="iconColor">@android:color/white</item>
    <item name="android:popupBackground">@color/back_color</item>
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
    <item name="colorAccent">@android:color/holo_red_light</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >

    <item name="android:panelBackground">@color/back_color</item>
    <item name="android:textColor">@color/black</item>
</style>

<style name="StyledScrollerTextAppearance" parent="@android:style/TextAppearance">
    <item name="android:textSize">24sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@android:color/white</item>
</style>

<style name="AppTheme.TextAppearance">
    <item name="android:textColor">@color/White</item>
    <item name="android:textSize">12dp</item>
</style>

<style name="AppTheme.TextAppearance.Subtitle">
    <item name="android:textColor">@color/White</item>
    <item name="android:textSize">10dp</item>
</style>

<style name="PopupMenu">
    <item name="android:panelBackground">@color/back_color</item>
    <item name="android:textColor">@color/White</item>
</style>

<style name="Theme.AppCompat.Light.NoActionBarCustom" parent="Theme.AppCompat.Light.NoActionBar" >
    <item name="colorAccent">@android:color/holo_red_dark</item>
</style>

下面是回收器视图适配器

 @Override
public void onBindViewHolder(ItemHolder itemHolder, int i) {
    Song localItem = arraylist.get(i);

    itemHolder.title.setText(localItem.title);
    itemHolder.artist.setText(localItem.artistName);


    setOnPopupMenuListener(itemHolder, i);

}

private void setOnPopupMenuListener(ItemHolder itemHolder, final int position) {

    itemHolder.popupMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context wrapper = new ContextThemeWrapper(mContext, R.style.PopupMenu);
            final PopupMenu menu = new PopupMenu(wrapper, v);

            menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.popup_play:

                            break;
                        case R.id.popup_next:

                            break;

                    }
                    return false;
                }
            });
            menu.inflate(R.menu.popup_song);

            menu.show();
        }
    });
}

请帮帮我。

【问题讨论】:

    标签: android android-layout listview android-studio


    【解决方案1】:

    读完cmets,需要contextual menu

    Widget.PopupMenu 继承您的PopupMenu

       <style name="AppTheme.PopupMenu" parent="@android:style/Widget.PopupMenu">
            <item name="android:popupBackground">@color/yourcolor</item>
        </style>
    

    我建议将您的工具栏包含在 AppBarLayout 中,并在 AppBarLayout theme 中设置您的菜单样式。

     <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/app_bar"
            android:theme="@style/AppTheme.AppBarOverlay">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay"/>
    
        </android.support.design.widget.AppBarLayout>
    

    这里是样式。

       <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Light">
            <!-- text color for toolbar and popup menu-->
            <item name="android:textColorPrimary">@color/colorAccent</item>
            <item name="popupMenuStyle">@style/AppTheme.PopupMenu</item>
            <item name="android:popupMenuStyle">@style/AppTheme.PopupMenu</item>
        </style>
    
        <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark" />
    
        <style name="AppTheme.PopupMenu" parent="@android:style/Widget.PopupMenu">
            <!-- background color of popup menu-->
            <item name="android:popupBackground">@color/colorBlack</item>
        </style>
    

    最后,使用AppBarLayout 上下文创建弹出菜单。

       AppBarLayout bar= (AppBarLayout) findViewById(R.id.app_bar);
            PopupMenu p = new PopupMenu(bar.getContext(), findViewById(item.getItemId()));
    

    欲了解更多信息,请阅读this答案。

    【讨论】:

    • 它的列表视图不是单独的按钮。你能帮帮我吗?
    • 列表视图是什么意思?和按钮? @android:style/Widget.PopupMenu 是 android 的弹出菜单样式,它像列表一样打开(如果你正在考虑的话)
    • 我有一个列表,其中有弹出菜单。每行都有列表。举个例子。每行的删除,共享等。已在列表中创建弹出窗口。您可以在我的代码中看到回收适配器。这是有约束力的。
    • 你需要contextual menu,而不是弹出菜单。
    • 可以分享快照吗?
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    相关资源
    最近更新 更多