状态列表可绘制的行为很奇怪



我有这个StateListDrawable:

GradientDrawable gd = new GradientDrawable(Orientation.TOP_BOTTOM, new int[] {
            firstColor, secondColor });
StateListDrawable sld = new StateListDrawable();
sld.addState(new int[] { android.R.attr.state_pressed },
            new ColorDrawable(onClickColor));
sld.addState(StateSet.WILD_CARD, gd);

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
    <RelativeLayout
        android:id="@+id/actionBar"
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:baselineAligned="true" 
        android:descendantFocusability="afterDescendants">
        <ImageButton
            android:id="@+id/actionButtonBack"
            android:layout_width="48dip"
            android:layout_height="48dip"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" />
        <ImageButton
            android:id="@+id/actionButton3"
            android:layout_width="48dip"
            android:layout_height="48dip"
            android:layout_alignParentTop="true"
            android:layout_toLeftOf="@+id/actionButton2" />
        <ImageButton
            android:id="@+id/actionButton2"
            android:layout_width="48dip"
            android:layout_height="48dip"
            android:layout_alignParentTop="true"
            android:layout_alignWithParentIfMissing="true"
            android:layout_toLeftOf="@+id/actionButton1" />
        <ProgressBar
            android:id="@+id/actionButton1"
            android:layout_width="48dip"
            android:layout_height="48dip"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_alignWithParentIfMissing="true"
            android:padding="4dip" />
        <TextView
            android:id="@+id/tvTitle"
            android:layout_width="wrap_content"
            android:layout_height="48dip"
            android:layout_alignParentTop="true"
            android:layout_alignWithParentIfMissing="true"
            android:layout_toLeftOf="@+id/actionButton3"
            android:layout_toRightOf="@+id/actionButtonBack"
            android:gravity="center"
            android:textSize="14dip"
            android:textStyle="bold" />
    </RelativeLayout>
</merge>

然后我像这样设置可绘制对象:

tv.setClickable(false);
tv.setTextColor(textViewColor);
actionBack.setBackgroundDrawable(sld);
action2.setBackgroundDrawable(sld);
action3.setBackgroundDrawable(sld);
tv.setBackgroundDrawable(sld);
pb.setBackgroundDrawable(sld);

当我单击操作后退按钮时,整个布局将变为我作为 onClickButton 的颜色。

只是希望它的行为就像我按下了常规 xml 定义的按钮可绘制对象一样。

我做错了什么?

这是因为"tv"(id 为 android:id="@+id/tvTitle"的 TextView)的layout_width是"wrap_content",所以当颜色应用于此视图时,它采用整个边界,您需要对 TextView 的layout_width进行硬编码,或者将颜色应用为具有硬编码宽度的 ShapeDrawable。希望这能解决您的问题。

相关内容

  • 没有找到相关文章

最新更新