【问题标题】:Change text color on listView with buttons使用按钮更改 listView 上的文本颜色
【发布时间】:2011-10-21 01:05:25
【问题描述】:

我正在创建一个带有按钮的 ListView,但遇到了一些问题。
我的活动需要为每个操作执行 2 个不同的操作(ItemClickbuttonClick)。

我假设:

1 – 因为我在列表项上有按钮,所以我不能使用OnItemClickListener()。对吧?

所以,我为列表项创建布局并使其可点击。

listitem_textview_button.xml:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@drawable/selector_list_item">

<Button 
    android:id="@+id/listitem_textview_button_btn"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:text="@string/edit" />

<TextView
    android:id="@+id/listitem_textview_button_txv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:textSize="14sp"
    android:textColor="@drawable/selector_textview"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:layout_toRightOf="@+id/listitem_single_line_w_button_btn" />

</RelativeLayout>

请注意,我已经为布局创建了一个选择器,并为 Textview 创建了一个 stateColorList。

selector_list_item.xml

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

    <item 
        android:state_focused="true" 
        android:state_enabled="false"
        android:state_pressed="true"
        android:drawable="@drawable/shape_list_item_disabled" />

    <item 
        android:state_focused="true" 
        android:state_enabled="false"
        android:drawable="@drawable/shape_list_item_disabled" />

    <item 
        android:state_focused="true" 
        android:state_pressed="true"
        android:drawable="@drawable/shape_list_item_transition" />

    <item
        android:state_focused="false" 
        android:state_pressed="true"
        android:drawable="@drawable/shape_list_item_transition" />

    <item 
        android:state_focused="true"
        android:drawable="@drawable/shape_list_item_focus" />
</selector>

selector_textview.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true" android:color="@color/black" />
   <item android:state_focused="true" android:color="@color/black" />
   <item android:state_pressed="true" android:color="@color/black" />
   <item android:color="@color/red" />
</selector>

2 – 这是使用自定义项(包括 TextView 颜色)实现 ListView 的最佳方式?

当我点击item时,上面的代码并没有改变textViews的颜色。

在一些测试中,我看到文本颜色在以下情况下发生了变化:
1.使用模拟器的箭头。 2.移除ListView项的按钮。

问题出在哪里?

主屏幕: 箭头设备选择的列表项(黑色文本,ok!)

手指点击的列表项(文本为红色,应为黑色,失败

回答:

android:duplicateParentState="true" 添加到TextView。

【问题讨论】:

  • 如果在使用模拟器箭头时文本颜色发生变化,这可能意味着您没有设置正确的属性?我注意到您已经在 RelativeLayout 上设置了可点击属性,但您的 textview 不是需要 clickable 吗?或者您能否制作一个界面的打印屏幕,以说明您想要实现的目标?
  • @SanFrancesco,查看添加的示例

标签: android android-layout android-listview textview


【解决方案1】:

我不明白,你的布局是可点击的,但你有按钮?是选择行的按钮吗?

如果我是你,我不会做任何可点击的东西,除了按钮。 android:focusable="false" android:clickable="false"

然后你可以在按钮监听器中手动设置一行的选择:

getListView().setSelection(position);

让我知道这是否有效。

[编辑] 真正的问题是 TextView 需要是可点击的,而不是布局。

【讨论】:

  • 但我对列表项有两个不同的操作:单击行(布局)-> 打开 ActiviyA。单击按钮-> 打开 ActivityB。然后,我需要选择器同时适用于(布局和文本)。
  • @Rodrigo 所以它是可点击的 TextView,而不是布局。
  • 谢谢,它有效。但是为什么 Layout 不将选中状态传递给 childView(TextView) 呢?
  • @Rodrigo 只要你有一行里面有视图,那么布局就不想与用户交互有任何关系。
猜你喜欢
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 2019-12-17
  • 2017-04-10
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多