在方向更改时调整 ConstraintLayout
Posted
技术标签:
【中文标题】在方向更改时调整 ConstraintLayout【英文标题】:Resize ConstraintLayout on orientation change 【发布时间】:2018-06-08 17:09:52 【问题描述】:我正在 ConstraintLayout
的布局内播放视频,并覆盖 onConfigurationChanged
而不是重新启动活动,以防止视频在方向更改时停止和启动。我正在尝试确定将布局调整为全屏的最佳方式,因为布局在旋转期间不会刷新。布局使用以下约束:
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_
android:layout_
旋转后,我希望布局使用相同的约束,但宽度和高度会发生变化以适应横向而不是纵向,反之亦然。我目前使用DisplayMetrics
将视频播放器布局设置为屏幕的宽度和高度,但想知道是否有更好的解决方案。 RequestLayout
似乎没有这样做。谁有更好的解决方案?
【问题讨论】:
您需要创建两个布局,一个用于纵向模式,另一个用于横向模式,您可以根据需要自行配置它们,这比在 java 代码中使用函数更好。另见***.com/questions/4858026/… 谢谢 Azhy,我已经为一些过渡做了这个,但这是一个大布局,我有点想寻找一个解决方案,如果可能的话,我每次都不需要维护多个布局对其进行更改。虽然很好的解决方案。这可能是唯一的选择。只是想知道是否有任何“刷新”可以查看新的屏幕边界并进行调整。谢谢 我认为这是最成功的方法。 所以解决办法是创建两个不同的文件? 是的,包含很多内容以减少对 2 个布局的维护。 【参考方案1】:使用 onConfigurationChanged 方法并在同一布局上为 constrain set 设置动画...
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
Context context = this;
mConstraintSet2.clone(context, R.layout.state2); // get constraints from layout
setContentView(R.layout.state1);
mConstraintLayout = (ConstraintLayout) findViewById(R.id.activity_main);
mConstraintSet1.clone(mConstraintLayout); // get constraints from ConstraintSet
override fun onConfigurationChanged(newConfig: Configuration)
super.onConfigurationChanged(newConfig)
// Checks the orientation of the screen
if (newConfig.orientation === Configuration.ORIENTATION_LANDSCAPE)
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show()
TransitionManager.beginDelayedTransition(mConstraintLayout);
mConstraintSet1.applyTo(mConstraintLayout); // set new constraints
else if (newConfig.orientation === Configuration.ORIENTATION_PORTRAIT)
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show()
TransitionManager.beginDelayedTransition(mConstraintLayout);
mConstraintSet2.applyTo(mConstraintLayout); // set new constraints
【讨论】:
以上是关于在方向更改时调整 ConstraintLayout的主要内容,如果未能解决你的问题,请参考以下文章
如何在方向更改时调整多个标签的大小以自动适应 UIView 内部