22

選択したリスト項目ごとにこれを行うにはどうすればよいですか。

これを追加してみましたandroid:background

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" 
        android:state_pressed="false"
        android:drawable="@color/android_green" />
    <item android:state_focused="true" 
        android:state_pressed="true"
        android:drawable="@color/black_alpha" />
    <item android:state_focused="false" 
        android:state_pressed="true"
        android:drawable="@color/black_alpha" />
    <item android:drawable="@color/white_alpha" />
</selector> 

しかし、それは機能しません.ListView全体を変更します.


まだ機能していません、これが私がこれまでに持っているものです

::listview_background

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/black_alpha" />
    <item android:drawable="@color/white_alpha" />  
</selector> 

::上記を使用している私の見解

<ListView android:id="@+id/list" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:layout_below="@+id/round"
    android:listSelector="@drawable/listview_background">
</ListView>

問題は、black_alpha が選択されたリスト項目だけでなく、リスト全体に適用されることです。

4

5 に答える 5

21

リストでセレクターを使用する方法についての良い記事があります。

android:backgroundListViewに設定するのではなく、android:listSelector以下のように設定したいと思います。

<ListView android:id="@+id/list" 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content" 
      android:layout_gravity="center"
      android:divider="@null" 
      android:dividerHeight="0dip"
      android:listSelector="@drawable/list_selector" />
于 2010-01-31T04:34:15.737 に答える
8

ジャックス、あなたはこう言いました:

問題は、black_alpha が選択されたリスト項目だけでなく、リスト全体に適用されることです。

私も同じ問題を抱えていました。しばらくいじった後、色を適用する代わりに、必要な色の 3x3 png 画像を使用して、リスト全体に色を適用するのを停止することができました。したがって、何らかの奇妙な理由で、色を使用すると奇妙な背景の動作が得られます.pngを使用すると、正常に動作します. :S

それがそれを回避する1つの方法です。

- - -別の方法 - - - - -

listView セレクターを次のような状態に設定しないと、最良の結果が得られました。

res/drawable/list_selector.xml

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

次に、リスト項目の背景にあるすべての状態を処理します。セレクターにはありません。この方法でよりコントロールできることがわかりました。

res/color/list_item_bg.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="@color/list_item_black_translucent" />
<item android:state_pressed="true" 
    android:drawable="@color/light_green_accent_translucent" />
</selector>

次に、ここに私のリスト項目があります:

res/layout/simple_list_item.xml

<?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="wrap_content"
android:orientation="horizontal"
android:paddingRight="45dip"
android:paddingBottom="2dip"
android:layout_gravity="center_vertical"
android:background="@color/list_item_bg">
  <ImageView
    android:id="@+id/arrow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="8dip"
    android:src="@drawable/list_item_arrow" />
 <TextView
android:id="@+id/simple_list_item_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textSize="12sp"
android:textColor="@color/list_label_color"/>
</LinearLayout>
于 2010-10-20T17:16:47.753 に答える
3

色の変更がリスト全体に適用されるという問題にも直面していました。

しかし、今では私のために働いています:

リストビューを含む私のメインページ (ここではリストセレクターを適用していないことに気付きました):

 <ListView 
    android:id="@+id/controlList" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

代わりに、listselector を getView に適用します。たとえば、特定の行 (convertView)に、その状態が変化したとき (たとえば、押された、フォーカスされたとき) に、drawable foldable で listselector.xml を使用するように指示します。

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if(convertView == null){
                LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
                convertView = li.inflate(R.layout.control_list, null);
                viewHolder = new ViewHolder();

                viewHolder.topText = (TextView) convertView.findViewById(R.id.toptext);
                viewHolder.bottomText = (TextView) convertView.findViewById(R.id.bottomtext);
                convertView.setTag(viewHolder);

            }
            else{
                viewHolder = (ViewHolder) convertView.getTag();
            }


                    //each convertView will be assigned the listselector
            convertView.setBackgroundResource(R.drawable.listselector);


            viewHolder.topText.setText(testSchemes[position]);

            //viewHolder.vText.setText(testDetails[position]);
            return convertView;
        }

そして最後に私のlistselector.xml:

<?xml version="1.0" encoding="utf-8"?>

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

    <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
    <item android:state_pressed="true" 

        android:drawable="@color/darkgreen" />

    <item android:state_selected="true" android:state_pressed="false"
        android:drawable="@color/orange" />



</selector>

これが上記のコードの動作です。最初にロードされたときのすべてのエントリは薄緑色です。カーソルを使用して上下にスクロールすると、選択したエントリがオレンジ色で強調表示されます。行を押すと、暗緑色に変わります。

于 2011-03-25T09:33:12.110 に答える
2

コメントで bigstones が言及したように、実際の解決策は色の代わりに形状を使用することです (リスト全体が強調表示されていました)。完全な解決策は次のとおりです。

次の 2 つの属性をリストビューに追加します。

android:drawSelectorOnTop="true"
android:listSelector="@drawable/my_list_selector"

my_list_selector.xml をドローアブル フォルダーに追加します。

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#77526F35"/>
</shape>

これで、リスト項目は、押された状態で半透明の緑色のオーバーレイを表示するはずです。

于 2012-11-15T12:50:03.803 に答える