我遇到了一些问题,我基本上不知道如何修复。我有一个LinearLayout,其中包含一些子代码,如ImageView,TextView等,下面的xml中可以看到一个例子:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/list_buttom_top">
<LinearLayout android:gravity="center_vertical"
android:paddingLeft="10dip"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.0">
<TextView android:text="title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/title"
style="@style/content_page_large_text" />
<TextView android:text="summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/subtitle"
android:visibility="visible"
style="@style/content_page_small_text" />
</LinearLayout>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemCount"
android:visibility="gone"
style="@style/content_page_large_count_text" />
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chevron"
style="@style/list_buttom_chevron" />
</LinearLayout>
样式list_buttom_top表示当LinearLayout处于按下状态时,需要更改背景颜色,到目前为止这是有效的。问题是content_page_large_text还表示TextView的文本颜色也需要更改,但它不会发生。单击LinearLayout时唯一的颜色变化是它的背景。
<style name="list_buttom_top">
<item name="android:clickable">true</item>
<item name="android:paddingTop">10dip</item>
<item name="android:paddingBottom">10dip</item>
<item name="android:paddingLeft">10dip</item>
<item name="android:paddingRight">10dip</item>
<item name="android:gravity">center_vertical</item>
<item name="android:background">@drawable/background_view_rounded_top</item>
</style>
<style name="list_buttom_chevron">
<item name="android:paddingLeft">4.0dip</item>
<item name="android:paddingTop">2.0dip</item>
<item name="android:paddingRight">4.0dip</item>
<item name="android:paddingBottom">2.0dip</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:src">@drawable/chevron</item>
</style>
我在我的TextViews中尝试过使用这个android:duplicateParentState =“true”,但它也没有用。 ImageView也是如此,当我点击LinearLayout时,它没有改变它的源图像。
我在这里遗漏了什么吗? 感谢您的关注 Ť
答案 0 :(得分:36)
我认为您应该在线性布局中设置android:addStatesFromChildren="true"
,这样子项的状态就会传播到父级。
另外,请确保 NOT 将其与android:duplicateParentState="true"
结合使用,因为它会导致堆栈溢出异常(基本上会导致无限的引用循环)。
答案 1 :(得分:1)
如果我们能够看到您的content_page_large_text样式,那么跟踪这将是一个更容易的问题。另外,我看不出你是如何设置颜色的,你的background_view_rounded_top是<selector>
元素,还是你在活动的监听器中设置它?
但是我也最近发现android:duplicateParentState =“true”并不是我认为的灵丹妙药。
如果这两个解决方案都用完了,那么我的解决方案通常是根布局的自定义组件。
http://developer.android.com/guide/topics/ui/custom-components.html
但如果界面这么简单,那可能就没有必要了。我很确定你可以用StateListDrawable
来做到这一点。
自定义组件通常比尝试找到xml变量的神奇组合更容易,并且如果您计划使其更复杂,将使布局更容易理解/可编辑。