Java 我使用Onclick按钮事件进行颜色更改,但当应用程序进入横向模式时,颜色会丢失。怎么办?
包含按钮颜色的所有代码的java文件Java 我使用Onclick按钮事件进行颜色更改,但当应用程序进入横向模式时,颜色会丢失。怎么办?,java,android,Java,Android,包含按钮颜色的所有代码的java文件 private Button btn1 ,btn2,btn3,btn4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mains); btn1 = (Button) findViewById(R.id.btn01); btn2 = (
private Button btn1 ,btn2,btn3,btn4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
btn1 = (Button) findViewById(R.id.btn01);
btn2 = (Button)findViewById(R.id.btn02);
btn3 = (Button)findViewById(R.id.btn03);
btn4 = (Button) findViewById(R.id.btn04);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.btn01) {
btn1.setBackgroundColor(Color.RED);
btn1.setTextColor(Color.WHITE);
}
if(v.getId() == R.id.btn02) {
btn2.setBackgroundColor(Color.RED);
btn2.setTextColor(Color.WHITE);
}
if(v.getId() == R.id.btn03) {
btn3.setBackgroundColor(Color.GREEN);
btn3.setTextColor(Color.WHITE);
}
if(v.getId() == R.id.btn04) {
btn4.setBackgroundColor(Color.RED);
btn4.setTextColor(Color.WHITE);
}
}
}
manifest拥有所需的一切。请帮助我解决此问题。应用程序在纵向模式下工作正常,但在横向模式下选定的按钮失去颜色您可以将android:freezesText=“true”设置为您的按钮。或者,您可以在
onSaveInstanceState()
中手动保存每个按钮的状态,然后,当您在onCreate()
或onRestoreInstanceState()
回调中获得该值时
例如(假设您只有两个按钮):
从onCreate()
或onRestoreInstanceState()
:
此外,在onClick()
方法中,如果按下按钮,则需要设置新状态。例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
if (savedInstanceState != null) {
// Restore states of buttons from saved state
btn1Pressed = savedInstanceState.getBoolean(STATE_BUTTON1, false);
btn2Pressed = savedInstanceState.getBoolean(STATE_BUTTON2, false);
}
btn1 = (Button)findViewById(R.id.btn01);
btn1.setOnClickListener(this);
btn2 = (Button)findViewById(R.id.btn02);
btn2.setOnClickListener(this);
if(btn1Pressed){
changeColor(btn1);
}
if(btn2Pressed){
changeColor(btn2);
}
}
private void changeColor(Button b){
b.setBackgroundColor(Color.RED);
b.setTextColor(Color.WHITE);
}
您可以将android:freezesText=“true”设置为您的按钮。或者,您可以在
onSaveInstanceState()
中手动保存每个按钮的状态,然后,当您在onCreate()
或onRestoreInstanceState()
回调中获得该值时
例如(假设您只有两个按钮):
从onCreate()
或onRestoreInstanceState()
:
此外,在onClick()
方法中,如果按下按钮,则需要设置新状态。例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
if (savedInstanceState != null) {
// Restore states of buttons from saved state
btn1Pressed = savedInstanceState.getBoolean(STATE_BUTTON1, false);
btn2Pressed = savedInstanceState.getBoolean(STATE_BUTTON2, false);
}
btn1 = (Button)findViewById(R.id.btn01);
btn1.setOnClickListener(this);
btn2 = (Button)findViewById(R.id.btn02);
btn2.setOnClickListener(this);
if(btn1Pressed){
changeColor(btn1);
}
if(btn2Pressed){
changeColor(btn2);
}
}
private void changeColor(Button b){
b.setBackgroundColor(Color.RED);
b.setTextColor(Color.WHITE);
}
当您旋转设备时,活动将被
销毁
,并重新创建
。因此,您可以做的是重写活动的onSaveInstanceState(Bundle savedInstanceState)
方法。您可以将要保留的状态(颜色)保存在savedInstanceState
捆绑包中。在onCreate()
中,您将获得此捆绑包,以便恢复您保存的任何状态。当您旋转设备时,活动将被销毁并重新创建。因此,您可以做的是重写活动的onSaveInstanceState(Bundle savedInstanceState)
方法。您可以将要保留的状态(颜色)保存在savedInstanceState
捆绑包中。在onCreate()
中,您将获得此捆绑包,这样您就可以还原
您保存的任何状态。您能为我提供一个指导吗..我想设计一个可以自动调整为所有屏幕大小的UI..有没有办法???@niks所有相关代码都包含在我的回答中单击您编写的changeColor(v)除此之外,它是私有的void changecolor(按钮b),我不知道为什么,我在那里做了很多更改,但是按钮颜色没有改变。请立即测试它。我假设设置clickListner的所有工作都已经完成了。而且,您应该知道,所有的按钮都是视图
s,因此只需将视图
强制转换为按钮
即可。我编辑了我的答案,为每个按钮添加了侦听器,假设您的活动实现了查看。onclick Listener可以为您提供更多指导。我想设计一个可以自动调整为所有屏幕大小的UI。有什么方法吗???@niks所有相关代码都包含在我的回答中。onclick you write changeColor(v)及以上,它是私有的void changeColor(按钮b)我不知道为什么,我在那里做了很多改变,但是按钮颜色没有改变。你能马上测试一下吗。我假设设置clickListner的所有工作都已经完成了。而且,你应该知道,所有的按钮都是视图
s,所以只需将视图
转换为按钮
全部sholud工作正常。我编辑了我的答案,为每个按钮添加了侦听器,假设您的活动实现了查看。OnClickListener
界面我知道,但您的回答很短,因此很难理解。谢谢,但您的回答很短,因此很难理解。
private boolean btn1Pressed = false;
private boolean btn2Pressed = false;
static final String STATE_BUTTON1 = "button_1";
static final String STATE_BUTTON2 = "button_2";
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the buttons current state
savedInstanceState.putBoolean(STATE_BUTTON1, btn1Pressed);
savedInstanceState.putBoolean(STATE_BUTTON2, btn2Pressed);
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
if (savedInstanceState != null) {
// Restore states of buttons from saved state
btn1Pressed = savedInstanceState.getBoolean(STATE_BUTTON1, false);
btn2Pressed = savedInstanceState.getBoolean(STATE_BUTTON2, false);
}
btn1 = (Button)findViewById(R.id.btn01);
btn1.setOnClickListener(this);
btn2 = (Button)findViewById(R.id.btn02);
btn2.setOnClickListener(this);
if(btn1Pressed){
changeColor(btn1);
}
if(btn2Pressed){
changeColor(btn2);
}
}
private void changeColor(Button b){
b.setBackgroundColor(Color.RED);
b.setTextColor(Color.WHITE);
}
if(v.getId() == R.id.btn01) {
btn1Pressed = true;
changeColor((Button)v);
}
// do the same with other buttons...