在方向更改时调整ConstraintLayout的大小

时间:2018-06-08 17:09:52

标签: android size orientation android-constraintlayout onconfigurationchanged

我正在ConstraintLayout的布局中播放视频并覆盖onConfigurationChanged而不是重新启动活动,以防止视频停止并开始更改方向。我正在尝试确定将布局调整为全屏的最佳方法,因为在旋转期间不会刷新布局。布局使用以下约束:

app:layout_constraintEnd_toEndOf="parent"  
app:layout_constraintStart_toStartOf="parent"  
android:layout_width="0dp"  
android:layout_height="0dp"  

旋转后,我希望布局使用相同的约束,但宽度和高度会改变以适应景观而不是纵向,反之亦然。我目前使用DisplayMetrics将视频播放器布局设置为屏幕的宽度和高度,但想知道是否有更好的解决方案。 RequestLayout似乎没有这样做。有人有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用 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
        }
    }