防止旋转后出现视图
问题描述:
我在约束布局的上方添加了约束布局,并且在其内部有一个按钮,当我点击它时,它应该使约束布局和按钮消失 并且这是代码防止旋转后出现视图
Button button11 = (Button) findViewById(R.id.button11);
final ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraint_layout_inside);
button11.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
constraintLayout.setVisibility(View.INVISIBLE);
}
当我旋转屏幕约束布局再次出现时的问题 如何防止?
答
此方法添加到您的活动
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setContentView(R.layout.lanscape_activity);
// your own layout
} else {
setContentView(R.layout.portrait_activity);
// your own layout
}
}
而且这条线在你的清单
android:configChanges="orientation|keyboardHidden|screenSize"
+0
抱歉,但它不起作用 – khaleader
答
它可以因为活动被破坏和方向更改后创建不能自动处理。因此,你必须自己处理它。
保存当前状态在onSaveInstanceState()
:
override fun onSaveInstanceState(outState: Bundle?) {
super.onSaveInstanceState(outState)
outState.putBoolean("someKey", constraintLayout.visibility == View.VISIBLE)
}
然后,在onCreate()
:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize views
...
// if `savedInstanceState` is not null, then look for `someKey` in bundle
savedInstanceState?.run {
val isVisible = getBoolean("someKey")
constraintLayout.visibility = if (isVisible) View.VISIBLE else View.INVISIBLE
}
if (null == savedInstanceState) {
// This activity is starting for the first time,
// not an orientation change case
}
}
见[处理配置的变化(https://developer.android.com/guide/topics/resources /runtime-changes.html) – santalu