Android活动开始时更改按钮背景

时间:2014-01-11 21:00:43

标签: android android-layout android-button

我定义了两个可绘制文件: 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);

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

我可以在这里看到多个奇怪的事情:

  1. 您忘记使用已膨胀的视图 - 使用 setContentView(view);

  2. 现在我考虑一下,为什么你首先给视图充气,而不是使用:

    setContentView(R.layout.activity_calendar);
    

  3. 你处理一个不同的按钮来设置开关盒的每个盒子的背景。是故意的吗?

  4. super.onCreate(savedInstanceState); ”应该是代码的第一行。

  5. 在第一种情况下,您调用“ setBackgroundResource ”,然后在“ setBackgroundColor ”之后调用。第二个电话将取消之前的电话。