【问题标题】:Change the font color of TextView when ListView Item gets selected选择 ListView 项时更改 TextView 的字体颜色
【发布时间】:2023-03-07 12:21:01
【问题描述】:

我通过自定义适配器设置的每个 ListView 项中都有一个 TextView。 TextView XML 不在编写 ListView XML 的同一文件中,我希望当 ListView 的任何项目被选中时,该特定项目的字体颜色应该改变。我还通过定义 TextView 的不同状态(即选择、聚焦和按下)来尝试这一点,但这并不能解决我的问题。请建议我一些解决方案。这里是sn-p..

一个 xml 文件中的列表视图,例如。文件 1.xml

<ListView
    android:id="@+id/listView1"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="0.5"
    android:clickable="true" />

和不同xml中的T​​extView..即file2.xml

<TextView
    android:id="@+id/rowListTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="10dp"
    android:paddingLeft="10dp"
    android:paddingTop="10dp"
    android:text="@string/app_name"
    android:textColor="@color/file3"
    android:textSize="10sp"
    android:textStyle="bold" />  

res/color 文件夹中文本颜色属性的文件,即 file3.xml。

<item android:state_selected="true" android:color="@android:color/white"/>
<item android:state_focused="true"  android:color="@android:color/white"/>
<item android:state_pressed="true"  android:color="@android:color/white"/>
<item android:color="@android:color/black"/>

【问题讨论】:

  • teerapap 的答案是最好的答案——我认为它必须被接受。

标签: android android-listview


【解决方案1】:

试试这个 textColor 的颜色状态列表。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

Android guide 没有提到state_activated 属性,但它对我有用。

【讨论】:

  • android:state_activated 绝对是您想要的。为什么没有记录这个 ish 是疯狂的。我花了大约 30 分钟试图让它工作,然后我尝试了这个,它工作了。
  • 图像也可以这样,我想在两个图像之间切换,我尝试了图像而不是 android:color 到 android:src 但错误我
【解决方案2】:

在选择器中:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item  android:state_activated="true"  android:color="#ff0000" />
    <item android:state_active="true" android:color="#ff0000" />  
    <item android:state_pressed="true" android:color="#ff0000" />
    <item android:state_selected="true" android:color="#ff0000" />
    <item android:state_focused="true" android:color="#ff0000" />
    <item android:color="#000000" />
</selector>

活动中:myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

public void onItemClick(AdapterView<?> parent, View view,
                      int position, long id) {
                     pl=position;
                     myListView.setItemChecked(pl, true);
                     adapter.notifyDataSetChanged();
                          .....

item.xml:

<?xml version="1.0" encoding="utf-8"?>
    <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/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:textColor="@drawable/selector"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    />

在我点击它们后,我选中的项目是红色的。只有一项检查项目。享受吧!

【讨论】:

  • 如果在列表视图中选择元素,这应该是可接受的答案。实际上,@Master 的回答很好。
【解决方案3】:

下面的 sn-p 会帮助你。

listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView <? > adapterView, View rowView,
    int position, long id) {
        TextView textView = (TextView) rowView.findViewById(R.id.rowListTextView);

        textView.setTextColor("Desired Color");

    }
});

当您滚动列表并且您选择的项目失去焦点时,我没有包含诸如保留文本颜色的场景。这个 sn-p 将引导您朝着正确的方向前进。

【讨论】:

  • 谢谢 vipul 我试过了,它在某处有所帮助,因为它改变了被点击的那个特定项目的字体颜色,但现在我希望一旦点击从那个特定项目消失,它应该保留原来的颜色位置。你能那样帮我吗?谢谢。
  • 以及如何在不点击的情况下更改TextView的颜色,例如在创建ListView时。
猜你喜欢
  • 2011-10-31
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2019-11-08
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
相关资源
最近更新 更多