无法设置操作栏背景颜色和所选列表视图颜色

时间:2015-09-21 06:24:56

标签: android android-layout android-listview android-styles android-menu

我使用了以下代码:

  listview.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {


                final int checkedCount = listview.getCheckedItemCount();

                mode.setTitle(checkedCount + " Selected");



            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {

                mode.getMenuInflater().inflate(R.menu.mymenu, menu);
                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.delete:
            //my delete code
                        mode.finish();
                        return true;
                    default:
                        return false;
                }
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                //
            }
        });

mymenu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/delete"
        android:icon="@android:drawable/ic_menu_delete"
        android:title="Delete"
        app:showAsAction="always"
        />

</menu>

styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <item name="android:actionModeBackground">@android:color/holo_blue_dark</item>
        <item name="android:actionModeStyle">@style/TestActionModeStyle</item>

    </style>

    <style name="TestActionModeStyle">
        <item name="android:titleTextStyle">@style/TestTitleStyle</item>
        <item name="android:subtitleTextStyle">@style/TestSubTitleStyle</item>
    </style>

    <style name="TestTitleStyle">
        <item name="android:textColor">@android:color/black</item>
        <item name="android:background">@android:color/holo_red_dark</item>
    </style>

    <style name="TestSubTitleStyle">
        <item name="android:textColor">@android:color/black</item>
        <item name="android:background">@android:color/holo_green_dark</item>
    </style>

当我在listview上长按时,选择了项目,菜单随删除按钮一起出现。但我无法设置整个菜单和事件的颜色,也不会反映所选的列表视图项。

白色菜单背景颜色和选定列表视图项目也会出现白色。

所以我想从列表视图颜色更改菜单颜色和所选项目。

从上面的代码来看它不起作用。

我怎样解决这个问题?

1 个答案:

答案 0 :(得分:0)

请在问题的菜单部分检查此答案:How to change the background color of Action Bar's Option Menu in Android 4.2?

此答案Change background color of selected item on a ListView,用于更改所选的列表视图项目。

为了完整起见,这些问题的部分内容与您相关:

对于菜单(注意他们谈论动作栏,但菜单也包括在内):

  

有一种简单的方法可以更改操作栏中的颜色使用ActionBar   发生器..

但是由于你已经有了一种风格,你只想在链接的问题中进一步更新菜单:

  

在样式生成器中,相关设置为Popup颜色,即   影响&#34;溢出菜单,子菜单和微调器面板背景&#34;。

     

继续生成zip,但是在生成的所有文件中,你   只需要一个图像,menu_dropdown_panel_example.9.png,其中   看起来像这样:

     

menu_dropdown_panel_example.9.png

     

因此,将其不同的分辨率版本添加到res / drawable- *。   (也许可以将它们重命名为menu_dropdown_panel.9.png。)

     

然后,作为一个例子,在res / values / themes.xml中你会得到   以下,使用android:popupMenuStyle和android:popupBackground   是关键设置。

     

<style name="MyAppActionBarTheme" parent="android:Theme.Holo.Light">
    <item name="android:popupMenuStyle">@style/MyApp.PopupMenu</item>
    <item name="android:actionBarStyle">@style/MyApp.ActionBar</item>
</style>

<!-- The beef: background color for Action Bar overflow menu -->
<style name="MyApp.PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_dropdown_panel</item>
</style>

<!-- Bonus: if you want to style whole Action Bar, not just the menu -->
<style name="MyApp.ActionBar" parent="android:Widget.Holo.Light.ActionBar.Solid">
    <!-- Blue background color & black bottom border -->
    <item name="android:background">@drawable/blue_action_bar_background</item>
</style>   

对于列表视图:

  

您可以跟踪当前所选元素的位置:

OnItemClickListener listViewOnItemClick = new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
            mSelectedItem = position;
            mAdapter.notifyDataSetChanged();
    }
}; 
     

并覆盖适配器的getView方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final View view = View.inflate(context, R.layout.item_list, null);

    if (position == mSelectedItem) {
        // set your color
    }

    return view;
}