ListFragment项目选定背景

Jos*_*and 12 android listview

所以我有一个ListFragment设置,其中有一些选项可以打开新的Fragments.我的一部分想要让ListFragment中的每个项目(我有大约6个)在选择它时有不同的颜色设置,我打电话给我getListView().setItemChecked(index, true); 是否可以设置不同的背景或者它们都必须相同?谢谢.

hac*_*bod 31

是的,你可以让他们使用不同的背景.对于其中的每一个,您将需要构建一个StateListDrawable,根据项的状态选择所需的背景.

如果查看布局片段演示,列表项将使用此布局:

setListAdapter(new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));
Run Code Online (Sandbox Code Playgroud)

那个布局是:

<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/textAppearanceLarge"
    android:gravity="center_vertical"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeight"
/>
Run Code Online (Sandbox Code Playgroud)

并且在这里设置的android:background归结为(对于黑暗的非全息主题):

<selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    <item android:state_activated="true"
            android:drawable="@android:drawable/list_selector_background_selected" />
    <item android:drawable="@color/transparent" />
</selector>
Run Code Online (Sandbox Code Playgroud)

所以只需编写自己的drawables,使用不同的drawables作为激活状态.

(注意我假设你正在使用Honeycomb,其中引入了激活状态.对于以前的平台版本,这不是那么干净但不太难 - 你需要编写一个实现Checkable的布局子类,并根据它来改变它的背景.检查状态.)

  • 是的,虽然它需要是一个变化的颜色资源. (3认同)