以编程方式设置状态Android

时间:2017-09-08 07:24:29

标签: android xml android-layout layout

我有两个布局,每个布局都包含2个TextView。代码就像这样

第一个布局

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="40dp"
    >
    <TextView
        android:id="@+id/total_hours_spend"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="@string/total_hours_spend"
        android:textSize="14sp"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:textStyle="bold"
        android:padding="@dimen/margin_padding_2dp"
        android:background="@drawable/rectangle_selector"/>
    <TextView
        android:id="@+id/total_budget_spend"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="@string/total_budget_spend"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:padding="@dimen/margin_padding_2dp"
        android:textStyle="bold"
        android:background="@drawable/rectangle_selector"
        android:textSize="14sp"/>
</LinearLayout>

第二版布局

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/margin_padding_4dp"
    android:padding="@dimen/margin_padding_4dp"
    >
    <TextView
        android:id="@+id/training"
        android:layout_width="@dimen/margin_0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_margin="@dimen/margin_padding_2dp"
        android:padding="@dimen/margin_padding_5dp"
        android:text="Trainings"
        android:textStyle="bold"
        android:gravity="center"
        android:textSize="17sp"
        android:background="@drawable/background_selector"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        />
    <TextView
        android:id="@+id/learning_programs"
        android:layout_width="@dimen/margin_0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Learning Programs"
        android:padding="@dimen/margin_padding_5dp"
        android:textStyle="bold"
        android:textSize="@dimen/text_size_seventeen"
        android:background="@drawable/background_selector"
        android:gravity="center"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        />
</LinearLayout>

对于这两种布局,我需要使用item_selectors在我正在进行的背景图像之间切换。这样的事情

Back_Selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:state_enabled="true" android:drawable="@drawable/rounded_corner" />
        <item android:state_focused="true" android:drawable="@drawable/rounded_corner"/>

        <item android:drawable="@drawable/rounded_corner_grey"/>
    </selector>

和Rectangle_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_enabled="true" android:drawable="@drawable/blue_rectangle"/>
    <item android:state_focused="true" android:drawable="@drawable/blue_rectangle"/>

    <item android:drawable="@drawable/grey_rectangle"/>
</selector>

屏幕的默认设计是TextView Training和TextView Total hours spend应该用选择器xml文件中设置的相应drawable突出显示。同时,两个布局中的一个TextView应该是一直都很活跃。

问题是启动应用时只会突出显示Training。在第二个布局中,两个textView都处于非活动状态。

当我在第二个布局上单击某些内容时,第二个布局中的TextView会变为非活动状态。

我的意思是,在4个文本视图中,两个应始终处于活动状态。 但是使用上面的代码,我只有一个TextVIew处于活动状态。

我应该在这做什么改变?

1 个答案:

答案 0 :(得分:0)

正在发生的事情是每个文本视图一次只能有一个焦点(可绘制的聚焦状态),所以如果你点击另一个TextView,它将获得焦点,而另一个则失去它。

考虑到这一点以及您需要两个布局中的一个TextView的事实应该始终处于活动状态,我可以看到您的问题的最佳解决方案是2 { {1}}包含2个RadioButtons而不是TextView:

第一个布局

RadioGroups

第二个布局

<RadioGroup android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:weightSum="1">
    <RadioButton
        android:id="@+id/total_hours_spend"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:button="@null"
        android:text="@string/total_hours_spend"
        android:textSize="14sp"
        android:textStyle="bold"
        android:padding="@dimen/margin_padding_2dp"
        android:background="@drawable/rectangle_selector"/>
    <RadioButton
        android:id="@+id/total_budget_spend"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:button="@null"
        android:text="@string/total_budget_spend"
        android:padding="@dimen/margin_padding_2dp"
        android:textStyle="bold"
        android:background="@drawable/rectangle_selector"
        android:textSize="14sp"/>
</RadioGroup>

<强> background_selector.xml

<RadioGroup android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/margin_padding_4dp"
    android:padding="@dimen/margin_padding_4dp"
    android:weightSum="1">
    <RadioButton
        android:id="@+id/training"
        android:layout_width="@dimen/margin_0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:layout_margin="@dimen/margin_padding_2dp"
        android:padding="@dimen/margin_padding_5dp"
        android:button="@null"
        android:text="Trainings"
        android:textStyle="bold"
        android:gravity="center"
        android:textSize="17sp"
        android:background="@drawable/background_selector"/>
    <RadioButton
        android:id="@+id/learning_programs"
        android:layout_width="@dimen/margin_0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:button="@null"
        android:text="Learning Programs"
        android:padding="@dimen/margin_padding_5dp"
        android:textStyle="bold"
        android:textSize="@dimen/text_size_seventeen"
        android:background="@drawable/background_selector"
        android:gravity="center"/>
</RadioGroup>

<强> rectangle_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/blue_rectangle"/>
    <item android:state_checked="false" android:drawable="@drawable/rounded_corner_grey"/>
    <item android:drawable="@drawable/rounded_corner_grey"/>
</selector>

通过这种方式,它会在您曝光时起作用。

如果您仍想使用TextView,我看到的唯一方法是以编程方式创建一个实现Checkable接口的TextView,然后处理每个布局中一次只检查一个的逻辑。我认为我提出的解决方案花费的时间更少,达到了预期的效果。