如何将样式应用于Android中的嵌套视图

问题描述 投票:0回答:3

使用xml布局文件,其中包含以下部分:

<RelativeLayout
    android:layout_width="0px"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:id="@+id/relativeLayout"
    android:background="@drawable/custom_drawable" >

    <TextView
        android:text="Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:layout_centerVertical="false"
        android:layout_centerInParent="true" />

    <ImageView
        android:src="@drawable/image"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/imageView11"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp" />
</RelativeLayout>

并且考虑到“custom_drawable”是不同状态(按下,选择等)的选择器,我想知道是否可以使用“custom_drawable”将样式应用于嵌套元素。例如,根据RelativeLayout的状态更改TextView的颜色...

有任何想法吗?


编辑:我找到了一种只使用XML文件的方法,检查我的答案。

android layout styles textview selector
3个回答
2
投票

我终于找到了一个解决方法,使它只使用XML文件。它包括在嵌套的子视图中使用子句android:duplicateParentState="true",并且状态是从父视图继承的。

还需要创建一个新的选择器来控制文本颜色/类型等。但这很简单。

使用初始代码的一个示例:

<RelativeLayout
    android:layout_width="0px"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:id="@+id/relativeLayout"
    android:background="@drawable/custom_drawable" >

    <TextView
        android:text="Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:layout_centerVertical="false"
        android:layout_centerInParent="true"
        android:textColor="@drawable/custom_drawable_text"
        android:duplicateParentState="true" />

    <ImageView
        android:src="@drawable/image"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/imageView11"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp" />
</RelativeLayout>

0
投票
btn1.setOnTouchListener(new OnTouchListener() {
 @Override
public boolean onTouch(View v, MotionEvent event) {
 if(event.getAction() == MotionEvent.ACTION_DOWN) {
 btn2.setTextColor(Color.parseColor("#ad321a"));
} else if (event.getAction() == MotionEvent.ACTION_UP) {
btn2.setTextColor(Color.parseColor("#Fad213"));
}
return false;
}
});

当我按下按钮然后它会改变btn2的颜色时,我已经为这两个按钮写了这个代码,当我发布时它会再次改变它的颜色。


0
投票

试试这种方式

  1. activity_main.xml中 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <RadioGroup android:id="@+id/rdg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="1dp" android:layout_marginTop="1dp" android:orientation="horizontal" > <RadioButton android:id="@+id/rdbOne" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/radio_selector_background" android:button="@null" android:checked="true" android:padding="2dp" android:gravity="center" android:drawableBottom="@drawable/ic_launcher" android:text="One" android:textColor="@drawable/radio_selector_color" /> <RadioButton android:id="@+id/rdbTwo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/radio_selector_background" android:button="@null" android:padding="2dp" android:gravity="center" android:drawableBottom="@drawable/ic_launcher" android:text="Two" android:textColor="@drawable/radio_selector_color" /> <RadioButton android:id="@+id/rdbThree" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/radio_selector_background" android:button="@null" android:padding="2dp" android:gravity="center" android:drawableBottom="@drawable/ic_launcher" android:text="Three" android:textColor="@drawable/radio_selector_color" /> </RadioGroup> </LinearLayout>
  2. 在drawable文件夹下面定义两个xml文件。(用于颜色和背景选择器) 一个。 radio_selector_background.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/orange" android:state_checked="true"></item> <item android:drawable="@color/white"></item> </selector> 湾radio_selector_color.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/white" android:state_checked="true"></item> <item android:color="@color/orange" ></item> </selector>
  3. 在values文件夹下定义colors.xml <?xml version="1.0" encoding="utf-8"?> <resources> <color name="orange">#f04e23</color> <color name="white">#ffffff</color> </resources>
© www.soinside.com 2019 - 2024. All rights reserved.