2

私はいくつかのListViewを持っています。これはアイテムビューのコードです:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" android:background="@drawable/list_drawable_settings"
              android:layout_height="fill_parent" android:gravity="center_vertical" android:orientation="vertical">
    <LinearLayout
            android:id="@+id/section"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            >
        <com.vk.messenger.views.TextViewMyriadPro android:id="@+id/word"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"/>
     </LinearLayout>
    <RelativeLayout android:layout_width="fill_parent"
                   android:layout_height="wrap_content" android:gravity="center_vertical">
        <LinearLayout android:layout_height="wrap_content" android:layout_centerVertical="true" android:gravity="center_vertical" android:layout_width="fill_parent">
        <com.vk.messenger.views.RoundedConersImageView android:id="@+id/userpic"
                   android:layout_marginLeft="9dip" android:layout_marginRight="9dip"
                   android:layout_marginTop="6dip" android:layout_marginBottom="6dip"
                   android:layout_height="40dip"
                   android:layout_width="40dip"/>
        <com.vk.messenger.views.TextViewMyriadPro android:id="@+id/name"
                  android:layout_toRightOf="@id/userpic"
                  android:textColor="@color/friends_text_color"
                  android:textSize="15dip"
                  android:textStyle="bold"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"/>
        </LinearLayout>
        <ImageView android:id="@+id/online"
                   android:visibility="invisible"
                   android:layout_marginRight="9dip"
                   android:layout_centerVertical="true"
                   android:src="@drawable/online_list"
                   android:layout_height="wrap_content"
                   android:layout_width="wrap_content"
                   android:layout_alignParentRight="true"/>
    </RelativeLayout>
</LinearLayout>

リストビューの要素がフォーカスされると、メインレイヤーの背景が変わります。メイン要素がフォーカスされたときにテキストビュー要素のテキストの色を変更する方法は?

PS 下手な英語でごめんなさい(

4

2 に答える 2

0

これを行う私の考えは、テキストビュー要素の色を表す整数変数を使用してカスタム配列アダプターを作成することです。カスタム アダプタのgetViewメソッドで、textView の色を設定します。このようなもの:

public class CustomAdapter extends
    BaseAdapter {

private String[] data; //Your data
private Context context;
    private int textViewColor = Color.BLACK; //The color of your textViews with a default value

public CustomAdapter(Context _context, String[] _data) {
    context = _context;
    data = _data;
}

    public void setColor(int _color) {
        textViewColor = color;
    }

    //Use a viewholder if you havent already for more efficient listView.
    static class ViewHolder {
    protected TextView textView;
}

@Override
public View getView(int position, View inView, ViewGroup parent) {

    View v = inView;
    ViewHolder viewHolder;

    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.your_list_view_item_layout, null);
        viewHolder = new ViewHolder();
        viewHolder.textView = (TextView) v.findViewById(R.id.your_textViewId);
        v.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) v.getTag();
    }

          viewHolder.textview.setTextColor(textViewColor); //Set the color of your textViews
          //Do anything else you are supposed to...
   }

  ....
}

次にOnFocusChangeListener、listView に a を設定します。そこで、textViews の新しい色を設定します。このようなもの:

listView.setOnFocusChangeListener(new OnFocusChangeListener() {

                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    CustomAdapter adapter = (CustomAdapter) listView.getAdapter();
                    adapter.setColor(Color.White); //set the new color of your textViews components
                    adapter.notifyDataSetChanged(); //Call this to update the listview

                }
            });

listView で選択した項目の textView の色のみを変更する場合は、アダプターのメソッドで onFocusChangedListener を listViewItem に追加する必要がありますgetView()。このようなもの:

@Override
public View getView(int position, View inView, ViewGroup parent) {

    View v = inView;
    ViewHolder viewHolder;

    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.your_list_view_item_layout, null);
        viewHolder = new ViewHolder();
        viewHolder.textView = (TextView) v.findViewById(R.id.your_textViewId);
        v.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) v.getTag();
    }


          //set the onFocusChangedListener in the View item of the listView
          v.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                TextView textView = (TextView) v.findViewbyId(R.id.your_textViewId);
                if(hasFocus) {
                      textview.setTextColor(Color.BLUE);
                }
                else {
                      textview.setTextColor(Color.BLACK);
                }

            }
        });

          //Do anything else you are supposed to...
   }
于 2012-07-04T12:36:42.927 に答える
0

これは、ステートフル カラーを使用した非常にシンプルです。

「カラーリスト」ファイルを作成します。例えばres/color/font_color_selector.xml

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

次に、レイアウトで:<TextView android:textColor="@color/font_color_selector" ... />

于 2014-07-01T05:38:27.837 に答える