我定义了两个可绘制文件: button_neutral.xml
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/app_dark_grey"/>
</shape>
calendar_button_friends .xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/app_yellow"/>
</shape>
</item>
<item android:bottom="5dp" >
<shape android:shape="rectangle">
<solid android:color="@color/app_dark_grey" />
</shape>
</item>
</layer-list>
可以看出,button_neutral只是一个坚实的深灰色背景,选中的按钮是灰色底色,底部有一条黄色线。
根据活动的开始方式,我可能希望将选定的bground应用于屏幕上的按钮 - 因此检查传递给活动的意图我尝试将背景按钮设置为:
@Override
protected void onCreate( Bundle savedInstanceState ) {
Bundle extras = getIntent().getExtras();
if (extras != null) {
View view = getLayoutInflater().inflate(R.layout.activity_calendar, null);
int filter = extras.getInt("CALENDAR_FILTER");
switch (filter) {
case Constants.CALENDAR_SOCIAL_FILTER :
Button btn = ((Button) view.findViewById(R.id.calendar_filter_social));
System.out.println("XXXXX " + btn.getBackground().toString());
btn.setBackgroundResource( R.drawable.calendar_button_friends );
btn.setBackgroundColor(Color.BLUE);
System.out.println("XXXXX " + btn.getBackground().toString());
break;
case Constants.CALENDAR_FAMILY_FILTER :
((Button) view.findViewById(R.id.calendar_filter_family)).setBackgroundResource( R.drawable.calendar_button_family);
break;
case Constants.CALENDAR_WORK_FILTER :
((Button) view.findViewById(R.id.calendar_filter_work)).setBackgroundResource( R.drawable.calendar_button_work);
break;
case Constants.CALENDAR_ALL_FILTER :
((Button) view.findViewById(R.id.calendar_filter_all)).setBackgroundResource( R.drawable.calendar_button_all);
break;
}
}
super.onCreate( savedInstanceState );
}
所有意图,开关工作正常 - 但我无法在按钮背景中显示更改。我已经在layout xml中明确地应用了drawable以确保并且工作正常,但是我无法在正在加载的活动的onCreate中设置按钮bground。
我也尝试过调用invalidate()
作为远景,并尝试使用btn.setBackgroundColor(Color.BLUE);
任何想法我做错了什么?
答案 0 :(得分:1)
我可以在这里看到多个奇怪的事情:
您忘记使用已膨胀的视图 - 使用 setContentView(view);
现在我考虑一下,为什么你首先给视图充气,而不是使用:
setContentView(R.layout.activity_calendar);
你处理一个不同的按钮来设置开关盒的每个盒子的背景。是故意的吗?
“ super.onCreate(savedInstanceState); ”应该是代码的第一行。
在第一种情况下,您调用“ setBackgroundResource ”,然后在“ setBackgroundColor ”之后调用。第二个电话将取消之前的电话。