空间不足时更改垂直偏向

时间:2019-01-30 14:31:01

标签: android android-layout android-constraintlayout

问题

我在ConstraintLayout中有一个TextView。考虑TextView高20dp,我希望它位于ConstraintLayout的顶部,边距为50dp。但是,ConstraintLayout的高度不是固定的,并且有可能小于70dp,这意味着TextView可能不适合该高度。在这种情况下,我想将TextView垂直集中在ConstraintLayout中。

我的方法

我尝试了以下布局:

<ConstraintLayout android:layout_height="match_parent">

    <TextView
        android:layout_height="20dp"
        android:layout_marginTop="50dp"
        android:layout_marginBottom="50dp"
        app:layout_constraintVertical_bias="0.0"/>

</ConstraintLayout>

当ConstraintLayout中有足够的空间以适合TextView和顶部边缘时,此布局效果很好。但是,如果没有,我需要将垂直偏差更改为0.5,以便将TextView集中在ConstraintLayout中。

那么是否有可能根据是否有足够的空间来满足所有约束条件而分配不同的偏差(在XML中还是在编程中)?否则,可以使用其他什么方法?

1 个答案:

答案 0 :(得分:1)

以下是通过程序更改偏见的方法:

 ConstraintSet set = new ConstraintSet();
    ConstraintLayout constraintLayout = (ConstraintLayout)findViewById(R.id.your_layout);
    set.clone(constraintLayout);
    set.setVerticalBias(R.id.your_textview_id, 0.5f);
    constraintSet.applyTo(constraintLayout);

这是一种检测屏幕分辨率并检查高度限制的方法:

private static String getScreenResolution(Context context) {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;

    return "{" + width + "," + height + "}";
}