Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我使用Onclick按钮事件进行颜色更改,但当应用程序进入横向模式时,颜色会丢失。怎么办?_Java_Android - Fatal编程技术网

Java 我使用Onclick按钮事件进行颜色更改,但当应用程序进入横向模式时,颜色会丢失。怎么办?

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 = (

包含按钮颜色的所有代码的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 = (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...