ListView With Nine-Patch Item Background Issues

百般思念 提交于 2019-12-31 03:08:14

问题


WARNING: The XML in this question is wrong, read the answer before you confuse yourself!


I have been banging my head on the wall for a while now. The following posts have shed light on the subject, but failed to solve my issue: Android ListView State List not showing default item background and ListView item background via custom selector

The proper nine-patch background shows perfectly when I select the list item, but I can not get the default nine-patch background to show initially. It seems to me that I need to set the default item background somehow, but I can't figure out how to do so.

List View:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">
  <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/shopListHeader"
    />
  <ListView
    android:id="@+id/shopList"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:dividerHeight="0px"
    android:divider="#FFFFFFFF"
    android:listSelector="@drawable/shop_list_selector"
    />
</LinearLayout>

Selector:

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

    <!-- the list items are enabled and being pressed -->
    <item
        android:state_pressed="true"
        android:drawable="@drawable/shop_list_item_pressed" />

    <item
        android:state_selected="true"
        android:textColor="#FFFFFFFF" />
</selector>

Background:

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

    <item
      android:state_selected="true"
      android:drawable="@android:color/transparent" />

    <item
        android:drawable="@drawable/shop_list_item" />
</selector>

As you can see, I have dumbed down the examples from the references.

You may also notice that the Background selector isn't being referenced anywhere. I started tossing it in random places (if the app compiled the addition either had no effect or cause a forced close)

I have also made an attempt to stop the color of the text from changing to black and grey when an item is selected but not pressed (can be done by scrolling through the list). Since my background will be black in the center, the text becomes partially invisible when selected. That addition (the last item node in the Selector) does nothing, as far as I can tell.

Does anyone have any thoughts on getting this ridiculously time consuming functionality working?


回答1:


I was gonna delete this thread, but I can't so I'll see if I can't use this as an example of what not to do :)

First, in the ListView XML: android:listSelector="@drawable/shop_list_selector"
Don't do that!

What I was trying to do here was set the background of the list items and the android:background property didn't work. You may have noticed that the item XML is missing, and that is because it was missing from my head! (I never touched it over the countless hours I was hammering away at this 'issue') So the line android:background="@drawable/shop_list_selector" goes in the item's properties and everything is groovy. (Remember the XML above is very wrong so don't use it!)

...Well except that it doesn't look as good in real life as it did in my head :(
Back to the drawing board!!!




回答2:


You havent defined a "normal" state, see this example

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

in here white is the "normal" state, in here you can find some documentation about it.

I hope this helps



来源:https://stackoverflow.com/questions/5426385/listview-with-nine-patch-item-background-issues

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!