单击按钮更改布局背景颜色
Change layout background color on button click
我在尝试设置布局的背景颜色时遇到错误我收到空指针异常,我不知道为什么。我查看了各种帖子(例如 Change background color on button click?),我的代码似乎是正确的,但似乎仍未调用布局。
这是我的activity的代码
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"));
和一些其他变体,但似乎没有任何效果...
(EDIT 2) 我好像找到问题了。这似乎与我试图编辑与其他活动相关的布局有关。知道如何解决吗?
你没有给我们足够的信息来给你一个完整的答案,但如果你给我们的是完整的代码,那么你的错误就在这里:
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_call
。 NullPointerException
意味着您可能在名称中创建了一个类型,或者根本没有给它命名。
编辑:既然你已经明确了哪一行是错误的,我可以确认这是错误的。 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);
如果您想更改另一个 Activity 的 UI,请通过广播或 EventBus 向其发送消息。像这样
EventBus.getDefault().post(new EventUpdateUI());
共享首选项可能是您的解决方案。每个 activity 的 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
我在尝试设置布局的背景颜色时遇到错误我收到空指针异常,我不知道为什么。我查看了各种帖子(例如 Change background color on button click?),我的代码似乎是正确的,但似乎仍未调用布局。 这是我的activity的代码
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"));
和一些其他变体,但似乎没有任何效果...
(EDIT 2) 我好像找到问题了。这似乎与我试图编辑与其他活动相关的布局有关。知道如何解决吗?
你没有给我们足够的信息来给你一个完整的答案,但如果你给我们的是完整的代码,那么你的错误就在这里:
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_call
。 NullPointerException
意味着您可能在名称中创建了一个类型,或者根本没有给它命名。
编辑:既然你已经明确了哪一行是错误的,我可以确认这是错误的。 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);
如果您想更改另一个 Activity 的 UI,请通过广播或 EventBus 向其发送消息。像这样
EventBus.getDefault().post(new EventUpdateUI());
共享首选项可能是您的解决方案。每个 activity 的 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