layout()需要延迟更改才能进行视觉更改

时间:2018-10-13 21:40:30

标签: android android-studio

我试图在程序中“动态”创建布局,但是在使布局无延迟地更改其位置和大小时遇到​​问题。

代码:

total

xml:

point == txtTotal.text == total

if handler.postDelayed(runnable,1000);更改为handler.post(runnable);或完全删除了处理程序和runnable(仅离开布局线),布局根本不会更改位置或大小。 我不确定最小延迟是多少,但是具有延迟会导致元素明显闪烁或更改位置或大小。有办法摆脱延迟吗?

1 个答案:

答案 0 :(得分:0)

在Android中更改视图尺寸的规范方法是调整视图的LayoutParams。您不想直接呼叫layout()(在这种情况下);它并非旨在以这种方式使用。

也许是这样(而不是您的Runnable):

ConstraintLayout.LayoutParams params;
params = (ConstraintLayout.LayoutParams) linearLayout.getLayoutParams();
params.width = LayoutParams.MATCH_PARENT;
params.height = endValue - startValue;
params.topMargin = startValue;
linearLayout.setLayoutParams(params);

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.connect( R.id.myLinearLayout, ConstraintSet.TOP, R.id.constLayout, ConstraintSet.TOP, 0 );
constraintSet.applyTo( parent );

要使其正常工作,所有constLayout's子级都必须具有资源ID。因此,您可能会发现,最简单的方法就是将它们放在.xml文件中,开头为:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/constLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".testActivity">
    <LinearLayout
        android:id="@+id/myLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    <TextView
        android:id="@+id/startValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/endValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</android.support.constraint.ConstraintLayout>

在这种情况下,自然会用findViewById()找到它们,而不是动态添加它们。