如何在导航抽屉中更改列表选定项的颜色?

3
我从Android Studio的导航浏览器示例开始。我正在自定义所有内容,一切都很好,但我找不到如何更改导航抽屉中所选项目的颜色...现在是绿色的,我无法更改它。
我尝试了带有选择器drawable,但是没用,我只能更改整个背景而不能仅更改所选项。
如果这是一个新手问题,对不起,但我昨天在Google和这里花了几个小时都没有找到答案:/。
最终,我设法使其工作。
问题出在"android.R.layout.simple_list_item_activated_1"上。
这是一个Android内置的xml文件,因此您无法处理所需的颜色。
因此,我创建了一个名为“nav_drawer_layout.xml”的文件,其中包含与“android.R.layout.simple_list_item_activated_1”文件相同的内容。
然后,我进行了微调,将“android:background”属性更改为:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:background="@drawable/nav_drawer_colors"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

这指的是你需要创建的 nav_drawer_colors.xml 选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/selected_drawer" android:state_activated="true" />
    <item android:drawable="@color/selected_drawer" android:state_selected="true" />
    <item android:drawable="@color/pressed_drawer" android:state_pressed="true" />
    <item android:drawable="@color/backgroung_drawer" />
</selector>

selected_drawer、pressed_drawer和backgroung_drawer通常在values\colors.xml中定义。

现在一切都好了,除了阴影效果在listview中不起作用^^ 编辑:只需在fragment_navigation_drawer.xml中指定背景颜色并删除nav_drawer_colors.xml文件中的<item android:drawable="@color/backgroung_drawer" />即可 :)

希望这能帮助其他遇到同样问题的人 :)


使用列表选择器来为Listview选择列表。 - RockStar
3个回答

6

通过编码,您可以在ListView的项目单击上实现以下内容:

int save = -1;
listview.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // TODO Auto-generated method stub

                    parent.getChildAt(position).setBackgroundColor(
                            Color.parseColor("#A9BCF5"));

                    if (save != -1 && save != position) {
                        parent.getChildAt(save).setBackgroundColor(
                                Color.parseColor("#d6e6ff"));
                    }

                    save = position;
          });

使用选择器:

drawable文件夹中创建一个名为select.xml的文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="false" android:drawable="@color/green" />
 <item android:drawable="@color/transparent" />
</selector>

现在将这个文件设置为ListView在xml文件中的Listselector。例如:

android:listselector="@drawable/select"

或者也可以用作背景。
android:background="@drawable/select"

谢谢您的回复!当我尝试编程时,它可以工作,但第一次打开抽屉时它仍然是绿色的。当我更改选择并返回时,它就可以了,颜色正确。我找不到在哪里初始化正确的颜色。而且使用选择器仍然无法正常工作,我可以更改背景,但好像应用程序无法识别所选状态。 - Shoyun
你说:“现在将这个文件设置为ListView在xml文件中的Listselector。像这样,android:listselector="@drawable/select"。”我不明白在哪里设置。我尝试在我的fragment_navigation_drawer.xml中设置,但是出现了错误。 - Shoyun
好的,我把listselector写成了小写的listselector,所以出现了错误。 这个listview让我快疯了...现在它可以响应我的点击,但是它忽略了选中状态。我认为这是因为它不是我的布局,而是Android中预定义的布局:`mDrawerListView.setAdapter(new ArrayAdapter<String>( getActionBar().getThemedContext(), android.R.layout.simple_list_item_activated_1, android.R.id.text1, new String[]{ }));` - Shoyun

2
在drawable文件夹中创建XML文件 list_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/>
    <item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/list_item_bg_pressed" android:state_activated="true"/>

</selector>

list_item_bg_normal.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

  <gradient
      android:startColor="@color/list_background_pressed"
      android:endColor="@color/list_background_pressed"
      android:angle="90" />

</shape>

list_item_bg_pressed.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

 <gradient

      android:startColor="#aed200"

      android:endColor="#aed200"

      android:angle="90" />

</shape>


<ListView
        android:id="@+id/listview_drawer"
        android:layout_width="match_parent"
         android:layout_gravity="start"
        android:layout_height="match_parent"

        android:background="@drawable/list_selector"
        android:dividerHeight="1dp" />

谢谢您的回复!不幸的是,应用程序似乎无法识别已激活、聚焦或选定的状态。它应用了正确的背景,但选定的仍然是绿色的 :/ - Shoyun

1

请尝试以下操作:

1.在drawable文件夹中创建list_selector.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/dark_green" android:state_activated="true" />
<item android:drawable="@color/sliver" android:state_focused="true" />
</selector>

2. 然后在自定义的列表布局中将 list_selector.xml 设置为背景。

android:background="@drawable/list_selector"

1
谢谢您的回复!不幸的是,应用程序似乎无法识别已激活、聚焦或选定的状态。它应用了正确的背景,但选定的仍然是绿色的 :/ - Shoyun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接