按钮单击更改布局背景颜色

时间:2015-01-30 01:29:39

标签: android android-linearlayout background-color

我在尝试设置布局的背景颜色时遇到错误我得到了nullpointerexception而且我不知道为什么。我查看了各种帖子(比如这个Change background color on button click?),我的代码看似正确,但似乎还没有调用布局。 这是我活动的代码

public class Color extends Activity implements OnClickListener { 


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.color);

    findViewById(R.id.blue).setOnClickListener(this);
    findViewById(R.id.red).setOnClickListener(this);
    findViewById(R.id.pink).setOnClickListener(this);
    findViewById(R.id.green).setOnClickListener(this);
    findViewById(R.id.yellow).setOnClickListener(this);
    findViewById(R.id.light_blue).setOnClickListener(this);
    findViewById(R.id.button_blue).setOnClickListener(this);
    findViewById(R.id.button_red).setOnClickListener(this);
    findViewById(R.id.button_pink).setOnClickListener(this);
    findViewById(R.id.button_greend).setOnClickListener(this);
    findViewById(R.id.button_yellow).setOnClickListener(this);
    findViewById(R.id.button_light_blue).setOnClickListener(this);


}
public void onClick(View v){
    switch (v.getId()){
    case R.id.blue:

        LinearLayout l1 = (LinearLayout) findViewById(R.id.layout_call);
        l1.setBackgroundResource(R.color.blue);

这是logcat错误

01-30 01:25:06.828: E/AndroidRuntime(4837): FATAL EXCEPTION: main
01-30 01:25:06.828: E/AndroidRuntime(4837): Process: com.example.primeirocasopratico, PID: 4837
01-30 01:25:06.828: E/AndroidRuntime(4837): java.lang.NullPointerException
01-30 01:25:06.828: E/AndroidRuntime(4837):     at com.example.primeirocasopratico.Color.onClick(Color.java:42)

01-30 01:25:06.828: E/AndroidRuntime(4837):     at android.view.View.performClick(View.java:4463)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at android.view.View$PerformClick.run(View.java:18770)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at android.os.Handler.handleCallback(Handler.java:808)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at android.os.Handler.dispatchMessage(Handler.java:103)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at android.os.Looper.loop(Looper.java:193)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at android.app.ActivityThread.main(ActivityThread.java:5327)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at java.lang.reflect.Method.invokeNative(Native Method)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at java.lang.reflect.Method.invoke(Method.java:515)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
01-30 01:25:06.828: E/AndroidRuntime(4837):     at dalvik.system.NativeStart.main(Native Method)

我也试过这样设置背景:

findViewById(R.layout.city).setBackgroundColor( android.graphics.Color.parseColor("#0000FF"));

以及其他一些变化似乎没什么用......

(编辑2)我似乎发现了这个问题。这似乎与我尝试编辑与其他活动相关的布局有关。任何想法如何解决?

3 个答案:

答案 0 :(得分:2)

共享首选项可能是您的解决方案。每次活动的Oncreate检查变量并设置颜色。

public void onClick(View v){
        switch (v.getId()){
        case R.id.blue:
            backgroundColor("blue");
            break;
 }
}


private void backgroundColor(String color) {
        // TODO Auto-generated method stub
        SharedPreferences prefs = getSharedPreferences("BackgroundColor", MODE_PRIVATE);
          SharedPreferences.Editor editor = prefs.edit();
          editor.clear();
          editor.putString("Color", color);
          editor.commit();
    }

在其他活动中

SharedPreferences prefs = getSharedPreferences("BackgroundColor",
                  MODE_PRIVATE); 
String bgcolor = prefs.getString("Color","Anydefaultcolor");

现在您可以将布局设置为bgcolor

答案 1 :(得分:1)

你没有给我们足够的信息来给你一个完整的答案,但是如果你给我们的是完整的代码,那么你的错误就在这里:

public void onClick(View v){
    switch (v.getId()){
    case R.id.blue:

        LinearLayout l1 = (LinearLayout) findViewById(R.id.layout_call);
        l1.setBackgroundResource(R.color.blue);

具体来说,最后两行。确保您的LinearLayout实际上被称为layout_callNullPointerException表示你可能在名称中输入了一个类型,或者只是没有给它命名。

编辑:既然你明确了哪一行是错误,我可以确认这是错误。 R.id.layout_call不存在。

试试这个:

public class Color extends Activity implements OnClickListener { 

private LinearLayout linLay;    

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.color);

    linLay = (LinearLayout) findViewById(R.id.layout_call);

    findViewById(R.id.blue).setOnClickListener(this);
    findViewById(R.id.red).setOnClickListener(this);
    findViewById(R.id.pink).setOnClickListener(this);
    findViewById(R.id.green).setOnClickListener(this);
    findViewById(R.id.yellow).setOnClickListener(this);
    findViewById(R.id.light_blue).setOnClickListener(this);
    findViewById(R.id.button_blue).setOnClickListener(this);
    findViewById(R.id.button_red).setOnClickListener(this);
    findViewById(R.id.button_pink).setOnClickListener(this);
    findViewById(R.id.button_greend).setOnClickListener(this);
    findViewById(R.id.button_yellow).setOnClickListener(this);
    findViewById(R.id.button_light_blue).setOnClickListener(this);


}
public void onClick(View v){
    switch (v.getId()){
    case R.id.blue:

        linLay.setBackgroundResource(R.color.blue);

答案 2 :(得分:0)

如果您想要更改其他活动的用户界面,请通过广播或EventBus向其发送消息。喜欢这个

EventBus.getDefault().post(new EventUpdateUI());