Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用选择器设置初始ListView项的背景色_Android_Android Layout_Listview - Fatal编程技术网

Android 如何使用选择器设置初始ListView项的背景色

Android 如何使用选择器设置初始ListView项的背景色,android,android-layout,listview,Android,Android Layout,Listview,我不知道该怎么办,我想将列表视图项的初始背景色设置为灰色,但它们只有在我第一次选择(并取消选择)它们后才采用正确的背景色。在第一个项定义中,哪些属性未正确配置 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="false" andro

我不知道该怎么办,我想将列表视图项的初始背景色设置为灰色,但它们只有在我第一次选择(并取消选择)它们后才采用正确的背景色。在第一个
定义中,哪些属性未正确配置

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


还尝试直接设置列表视图项的背景,但是选择器不再有任何效果。

我建议尝试使用以下定义:

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

状态列表可提取项尝试按顺序匹配。如果您想在许多情况下使用“默认”绘图,那么它应该是最后一个,没有状态标志。发件人:

在每次状态更改期间,状态列表都会从上到下遍历 与当前状态匹配的第一项将用于 选择不是基于“最佳匹配”,而只是第一项 符合该州的最低标准


还尝试直接设置列表视图项的背景,但是选择器不再有任何效果

如果我没有弄错的话,选择器将绘制在列表项后面(默认情况下)。由于将纯灰设置为列表项,因此选择器中的红色不会显示。您可以通过更改定义颜色/灰色的方式来确认这一点-尝试向其添加低alpha值。在这种情况下,红色应该通过

当然,您可以通过设置android:drawSelectorOnTop=“true”
来更改此行为-默认值为false。但是,当选择器绘制在顶部时,列表项将隐藏

无论如何-根据您所说的,您希望项目在按下时具有
@color/red
背景,否则具有
@color/grey
背景

查看以下各项是否满足您的要求:

可为列表项视图绘制的选择器

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

简单地说,当按下列表项时,项目背景色是透明的,允许listSelector的红色可见。在所有其他情况下,
灰色
颜色可见。

选择器应与以下类似:

List_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
     android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@drawable/gradient_bg" />

    <item android:state_pressed="true"
        android:drawable="@drawable/gradient_bg_hover" />

    <item android:state_selected="true"
     android:state_pressed="false"
        android:drawable="@drawable/gradient_bg_hover" />
</selector>

希望这有帮助:)

您需要在可绘图文件夹下创建一个listselector.xml

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

    <item android:state_pressed="true"
        android:drawable="@drawable/gradient_bg_hover" />

    <item android:state_selected="true"
     android:state_pressed="false"
        android:drawable="@drawable/gradient_bg_hover" />
</selector>

然后在listview中添加:

 <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="#b5b5b5"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/listselector" />

  • 对于列表项,定义可绘制的选择器:
res/drawable/list\u item\u background.xml

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

    <item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <!-- Pressed state -->
    <item android:state_enabled="true" android:state_focused="true" android:drawable="@color/black" /> <!-- Focused state -->
    <item android:state_enabled="true" android:state_selected="true" android:drawable="@color/orange" /> <!-- Selected state -->
    <item android:drawable="@color/gray" /> <!-- Default state -->    

</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/list_item_background" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listitem" />

</LinearLayout>

  • 将上述可绘制设置为单个列表项的背景:
res/layout/list_item.xml

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

    <item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <!-- Pressed state -->
    <item android:state_enabled="true" android:state_focused="true" android:drawable="@color/black" /> <!-- Focused state -->
    <item android:state_enabled="true" android:state_selected="true" android:drawable="@color/orange" /> <!-- Selected state -->
    <item android:drawable="@color/gray" /> <!-- Default state -->    

</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/list_item_background" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listitem" />

</LinearLayout>

  • 使用上述自定义布局创建列表项:

    String[]mStrings={“一”、“二”、“三”、“四”};
    ListView list=(ListView)rootView.findViewById(R.id.list);
    setAdapter(新的ArrayAdapter(this.getActivity(),R.layout.list_项,R.id.listitem,mStrings))


事实上,我还没有尝试用这个来改变顺序,不幸的是,它也不起作用。。。在Android布局查看器上,它甚至拥有color@Mahoni如何/在何处设置此背景?@matiash直接在布局中使用
ListView
元素,属性为
android:listSelector=“@drawable/my_ListView_selector”
,看起来最有希望。列表视图的
android:listSelector
设置为
@color/red
,但是我在哪里设置定义的
?在
item.xml
上,如果是,在哪个属性上?不,抱歉,使用渐变不会改变任何东西。正如每个人都告诉您的,您需要在list_selector.xml文件中设置3个状态:是的,我尝试过;-)在
item.xml上使用
background
并不能解决三态方法的问题。无论出于何种原因,在
item.xml上使用属性
android:background
而不是
ListView
元素上的属性
android:listSelector
解决了这个问题。。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <!-- Pressed state -->
    <item android:state_enabled="true" android:state_focused="true" android:drawable="@color/black" /> <!-- Focused state -->
    <item android:state_enabled="true" android:state_selected="true" android:drawable="@color/orange" /> <!-- Selected state -->
    <item android:drawable="@color/gray" /> <!-- Default state -->    

</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/list_item_background" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listitem" />

</LinearLayout>