我试图在程序中“动态”创建布局,但是在使布局无延迟地更改其位置和大小时遇到问题。
代码:
total
xml:
point == txtTotal.text == total
if handler.postDelayed(runnable,1000);更改为handler.post(runnable);或完全删除了处理程序和runnable(仅离开布局线),布局根本不会更改位置或大小。 我不确定最小延迟是多少,但是具有延迟会导致元素明显闪烁或更改位置或大小。有办法摆脱延迟吗?
答案 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()
找到它们,而不是动态添加它们。