给定这个名为relLayoutWrap.xml的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/priorityView"
android:layout_width="50dip"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/statusCheckBox"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/StatusLabel" >
</TextView>
</RelativeLayout>
我想根据TextView元素的值为相对布局父元素应用不同的背景颜色。
当我对视图进行充气/回收时,textview元素的值可能会发生变化。即:
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
RelativeLayout itemLayout = (RelativeLayout) inflater.inflate(R.layout.relLayoutWrap,null);
final TextView priorityView = (TextView) itemLayout.findViewById(R.id.priorityView);
priorityView.setText("yes"); //or sometimes "no"
所以基本上如果TextView的值为“是”,我希望RelativeLayouts背景颜色为黄色,如果“no”,我希望背景颜色为蓝色。这纯粹是通过xml样式规则实现的吗?或者我必须手动设置背景颜色,因为此值会以编程方式更改?
答案 0 :(得分:1)
老实说,最好的方法是自己设置颜色。
据我所知,没有办法用XML来做这件事,因为有条件地检查文本然后根据文本更改颜色。你可能有两个不同的按钮XML,并以这种方式去做,但这里似乎并不需要。
在我的代码中,我有类似的东西,除了我有更多的东西要改变而不仅仅是颜色。对我来说,我这样做......
public static final int STATUS_CODE_YES = 1;
public static final int STATUS_CODE_NO = 2;
. . .
if(something something something) {
//I need to set the state to Yes!
updateTextView(STATUS_CODE_YES);
} else {
//I need to set the state to no...
updateTextView(STATUS_CODE_NO);
}
. . .
public void updateTextView(int status) {
switch(status) {
case STATUS_CODE_YES:
textView.setText("Yes");
textView.setBackground(Color.YELLOW);
//a lot more stuff here
break;
case STATUS_CODE_NO:
textView.setText("No");
textView.setBackground(Color.BLUE);
//a lot more stuff here
break;
default:
System.out.println("You did something wrong here...ERROR");
break;
}
这个系统对我很有用。从技术上讲,我想有可能通过XML实现这一目标,但它们并不适用于这种情况。