【问题标题】:Popup menu divider for App compat themeApp兼容主题的弹出菜单分隔符
【发布时间】:2016-07-25 09:34:48
【问题描述】:

我使用了 app compat 主题风格。

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:popupMenuStyle">@style/PopupMenu</item>
        <item name="android:itemTextAppearance">@style/myCustomMenuTextApearance</item>
        <item name="android:listPopupWindowStyle">@style/PopupMenuStyle</item>

    </style>
    <style name="PopupMenuStyle" parent="Widget.AppCompat.ListPopupWindow">
        <item name="android:divider">@drawable/devider</item>
        <item name="android:dividerHeight">2dp</item>
    </style>

    <style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
        <item name="android:popupBackground">@color/search_panel_color</item>
        <item name="android:textColor">@color/activity_button_text_color</item>
        <item name="android:shadowColor">@color/activity_theam_color</item>


    </style>

    <style name="myCustomMenuTextApearance" parent="@android:style/TextAppearance.Widget.TextView.PopupMenu">
        <item name="android:textColor">@color/activity_theam_color</item>
    </style>

我想在我的菜单项中添加一个分隔符。 我已经尝试了很多东西,但分隔线不适用...... 有没有办法显示分隔符?

【问题讨论】:

  • 你试过dropDownListViewStyle 吗?
  • 是的,我试过了。不工作
  • 对我来说很好用
  • 这种风格有什么遗漏吗?
  • 如果您的应用程序中有多个 style.xml 用于不同的 api 级别,然后与所有交叉检查。

标签: android popupmenu


【解决方案1】:

我也有同样的问题。解决方法是这样的:

<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">#000000</item>
    <item name="android:dividerHeight">1dp</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">   
  <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>

您也可以参考以下链接: How to add dividers between specific menu items?

【讨论】:

    【解决方案2】:

    我有一个解决方案。您可以通过编程根据您的选择设计弹出窗口。使用下面的代码来显示弹出菜单。

    private ListPopupWindow listPopupWindow;
    listPopupWindow = new ListPopupWindow(getApplicationContext());
    listPopupWindow.setWidth(400);
    listPopupWindow.setDropDownGravity(Gravity.CENTER);
    listPopupWindow.setAdapter(new listpopupadapter(a, type));
    listPopupWindow.setAnchorView(v);
    listPopupWindow.show();
    

    这里 listpopupadapter 是用于设计您的列表的类,如下所示。

    public class listpopupadapter extends BaseAdapter {
        ArrayList<String> a;
        String type;
    
        public listpopupadapter(ArrayList<String> a, String type) {
            this.a = a;
            this.type = type;
        }
    
        @Override
        public int getCount() {
            return a.size();
        }
    
        @Override
        public Object getItem(int position) {
            return getItem(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @SuppressLint("ViewHolder")
        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            // TODO Auto-generated method stub
            View root = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.raw_filter, null);
        }
    }
    

    【讨论】:

    • 工作..谢谢!!这是自定义样式可能适用于每种样式。
    【解决方案3】:

    根据您的主题风格,我猜您使用了Toolbar。您的菜单弹出窗口是从Toolbar 显示的吗?如果是这样,您可以按照以下步骤进行自定义。

    定义主题

    <style name="AppToolbarPopupTheme" parent="Widget.AppCompat.PopupMenu.Overflow">
        <item name="android:dropDownListViewStyle">@style/AppDropDownListViewStyle</item>
    </style>
    
    <style name="AppDropDownListViewStyle" parent="Widget.AppCompat.ListView.DropDown">
        <item name="android:divider">@drawable/line_divider</item>
        <item name="android:dividerHeight">1dp</item>
    </style>
    

    然后将主题应用到Toolbar

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:popupTheme="@style/AppToolbarPopupTheme">
    
    </android.support.v7.widget.Toolbar>
    

    【讨论】:

      【解决方案4】:

      如果你还没有找到这个问题的答案,那么这就是我使用这种风格的方式:

          <style name="PopupMenu">
          <item name="android:itemBackground">@color/background_medium_gray</item>
          <item name="android:background">@android:color/transparent</item>
          <item name="android:textColor">@android:color/black</item>
          <item name="android:colorBackground">@color/BackgroundGray</item>
          <item name="android:dividerHeight">1dp</item>
      </style>
      
          Context context = new ContextThemeWrapper(getActivity(), R.style.PopupMenu);
          final PopupMenu popupMenu = new PopupMenu(context, view);
      
          final MenuInflater menuInflater = popupMenu.getMenuInflater();
      

      【讨论】:

        【解决方案5】:

        我建议你添加虚拟组,试试这种方式

        <group>
            <!--add it like as a separator-->
            <item
                android:title=""
                android:showAsAction="always"
                android:enabled="false" />
        </group>
        

        【讨论】:

          【解决方案6】:

          使用 Material 主题会移除分隔线。也许这是解决此问题的简单方法。

          您可以尝试这个或任何全息主题(即@android:style/Widget.ListPopupWindow)以在弹出窗口中获得分隔效果

          <!-- Change Overflow Menu ListView Divider Property -->
          <style name="PopupMenuListView" parent="android:Widget.ListPopupWindow">
              <item name="android:divider">#FF0000</item>
              <item name="android:dividerHeight">2dp</item>
          </style>
          

          【讨论】:

            【解决方案7】:

            我制作了一个需要弹出提示的司机应用程序,当时我使用了这个。所以请试试这个。也许会有所帮助。

            <activity
                android:name="driver_activity_name
                android:theme="@android:style/Theme.Translucent.NoTitleBar" />
            

            【讨论】:

            • 你的答案应该适应问题
            • 你的司机活动名称是什么,我的意思是我在哪里应用这个?我有自定义弹出菜单的活动,
            • ✞ 您已经在清单中定义了只需添加带有此主题的过滤器。可能是它的作品✞
            猜你喜欢
            • 1970-01-01
            • 2014-04-30
            • 2014-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多