0

私はListViewを持っていて、ListViewアイテムのxmlファイルを作成しました。あなたが見ることができるようにAndroidで一度選択したTextViewの色を定義する方法は?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_item_selector_back" 
    android:minHeight="?attr/listPreferredItemHeight" 
    android:orientation="vertical"> 

    <CheckedTextView 
     android:id="@+id/list_item_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:textColor="@color/list_item_selector_fore" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/list_item_author" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/list_item_selector_fore" /> 

     <!-- and many more TextView elements --> 

    </LinearLayout> 
</LinearLayout> 

list_item_selector_fore.xml:

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

、私は根LinearLayoutに一度の背景を定義しました。しかし、TextViewごとにandroid:textColor="@color/list_item_selector_fore"を設定しなければならなかった。 フォアグラウンドで試しましたが、何も起こりませんでした。これをよりスマートにするにはどうすればよいですか?

探すために方法: two list view items

+0

をサブクラス化する必要があります。 – user3486470

+0

あなたが探しているビューのタイプの画像を投稿してください。@ EV221 – Lampard

+0

あなたは何をしたいですか? –

答えて

0

を私が正しく質問を理解し、あなたがのTextView内のテキストの色を変更したい場合。あなたがListViewの内部でこれらのアイテムを持っている場合、私はのためにその最も簡単な方法をお勧めし

TextView textView = (TextView) findViewById(R.id.myTextView); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView.setTextColor('set text color here'); 
      } 
     }); 

EDIT:あなたのXMLから、したがって、あなたがこれを行うことができますが、それはonClickになりたいらしいですあなたが望むものを達成するには、OnItemClickListenerを設定し、OnItemClickイベントに基づいてtextColorを変更します。これは次のようになります。

ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView textView = (TextView) view.findViewById(R.id.rowItemTextView); 
      textView.setTextColor('color goes here'); 
     } 
    }); 

この短いスニペットは正しい方向にあなたを導くことを願っています。

+0

はい、いくつかのTextViewがあります。私はそれらをそれぞれ手作業で手に入れたいとは思わない。そして、私はxmlの色を変更したいと思います。この方法の利点は、スクロール時に色の状態が保存されることです。 – EV221

+0

私はあなたが今何を意味するの写真を追加する編集を参照してください、私は答えを編集します〜 – Max

+0

問題は、ListViewのリサイクルのためにスクロールすると色が消えているということです。しかし、このスタイルやXMLのものを使用すると、スクロールバックすると背景色がそのまま残ります。 – EV221

0

あなたはすべてのTextViewのためにそれを行う場合は、最良の方法は、あなたがプログラム的にそれらのすべてにご `LinearLayout`とテキストの色のすべての子を見つけることができるのTextView

public class CustomeTextView extends TextView{ 

    public CustomeTextView(Context context) { 
     super(context); 
     this.setTextColor(R.color.white); 
    } 
} 
関連する問題