0

我创建了对话框,当我启动应用程序时首先显示该对话框(在 onCreate 方法中编码),然后问题和答案将显示在 textview

所以为了解决方向问题(所以当方向改变时对话框再次不显示)我使用Manifest:

android:configChanges="keyboardHidden|orientation"

我有res/layout-landres/layout-port

但只改变背景的颜色

onConfigurationChanged在我的活动中使用过(它被称为轮换)。

所以现在当方向改变时对话框不会再次出现并且背景被重绘但是初始化的问题和答案onCreate()不会显示

那么如何保养

4

4 回答 4

1

使用android:configChanges="keyboardHidden|orientation"意味着您的活动自己处理配置更改,系统不会更改布局。在http://developer.android.com/guide/topics/resources/runtime-changes.html

要重置文本视图,在不使用的情况下android:configChanges="keyboardHidden|orientation"

@Override
public Object onRetainNonConfigurationInstance() {
    final MyDataObject data = collectMyLoadedData();
     //here get the text from the text view, and any other info
    return data;
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
    if (data != null) {
       //get the text and set it in the text view
    }

}
于 2012-07-23T06:49:43.840 回答
0

当你改变设备的方向时,android会继续执行而不会再次调用onCreate,但是如果你把代码放在onResume中,这段代码会再次执行。

于 2012-07-23T06:48:14.250 回答
0

在 OnCreate 中为您的主布局添加为

 LinearLayout lv=(LinearLayout)findViewById(R.id.mainlayout);
  lv.setBackgroundColor(android.R.color.black);  // for default potrait or landscape view and after that add this in that activity

@Override
public void onConfigurationChanged(Configuration newConfig) {
  Configuration c = getResources().getConfiguration();

  if(c.orientation == Configuration.ORIENTATION_PORTRAIT ) {
    // portrait
     lv.setBackgroundColor(android.R.color.black);
  } else if(c.orientation == Configuration.ORIENTATION_LANDSCAPE ){
    // landscape
    lv.setBackgroundColor(android.R.color.white);
  }
}

并将其添加到您定义的活动中的清单中

 android:configChanges="keyboardHidden|orientation"
于 2012-07-23T09:28:46.847 回答
0

您是否使用onSaveInstanceState过保存数据和onRestoreInstanceState检索数据?如果您已完成此操作,那么您可以在 中显示相同的对话框onRestoreInstanceState

好吧,我有一个问题要问你。更改方向时如何保持背景颜色不变?如果颜色未知或随机颜色怎么办?

于 2016-03-25T13:05:39.057 回答