Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:将父视图传播到子视图_Android - Fatal编程技术网

Android:将父视图传播到子视图

Android:将父视图传播到子视图,android,Android,我遇到了一些基本上不知道如何解决的问题。我有一个线性布局,其中包含一些子元素,如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_

我遇到了一些基本上不知道如何解决的问题。我有一个线性布局,其中包含一些子元素,如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> 

style list_buttom_top表示,当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>    

真的
10度
10度
10度
10度
中心垂直
@可绘制/背景\视图\圆形\顶部
4.0dip
2.0dip
4.0dip
2.0dip
包装内容
包装内容
@可拉深/V形
我曾尝试在我的文本视图中使用这个android:duplicateParentState=“true”,但它也不起作用。ImageView也会发生同样的情况,当我单击LinearLayout时,它不会更改其源图像

我是不是遗漏了什么? 谢谢你的关注
T

如果我们能看到您的内容、页面、大字体和文本样式,那么跟踪问题就更容易了。另外,我看不出你实际上是如何设置颜色的,你的背景是一个
元素还是你在活动的侦听器中设置的

但是,是的,我最近还发现android:duplicateParentState=“true”并不是我认为的万能药

如果这两个解决方案已经用尽,那么我的go-to解决方案通常是根布局的自定义组件。 但是,如果接口如此简单,则可能没有必要这样做。我很确定你可以用
StateListDrawable
s来实现这一点


自定义组件通常比试图找到xml变量的神奇组合更容易,并且如果您打算使布局更复杂,则会使布局更易于理解/编辑。

我认为您应该在线性布局中设置
android:addStatesFromChildren=“true”
,这样子对象的状态将传播到父对象


另外,请确保不要将其与
android:duplicateParentState=“true”
结合使用,因为它会导致堆栈溢出异常(基本上会导致无限引用循环)。

即使没有完全回答问题,
android:duplicateParentState=“true”
正是我想要的。他问如何将状态从父代传播到子代。而不是相反。