Android 仅当另一个元素出现/消失时,对边距和宽度/高度的更改才起作用

Android 仅当另一个元素出现/消失时,对边距和宽度/高度的更改才起作用,android,Android,我设置了一个简单的活动,试图把这个问题归结起来。 我有一个框架布局,其中启用了“AnimateLayoutchanges”。 我有一个按钮,点击它可以改变文本视图的布局边距和宽度。 如果这是唯一的布局更改,则边距和宽度的更改将不会设置动画。但是,如果我简单地将可见性设置为同一FrameLayout的另一个子级,则可见性更改和边距/宽度更改都将设置动画 旁注:可见性和边距+宽度的更改将按顺序进行,而不是同时进行,是否有方法更改此行为 <LinearLayout xmlns:android="

我设置了一个简单的活动,试图把这个问题归结起来。 我有一个框架布局,其中启用了“AnimateLayoutchanges”。 我有一个按钮,点击它可以改变文本视图的布局边距和宽度。 如果这是唯一的布局更改,则边距和宽度的更改将不会设置动画。但是,如果我简单地将可见性设置为同一FrameLayout的另一个子级,则可见性更改和边距/宽度更改都将设置动画

旁注:可见性和边距+宽度的更改将按顺序进行,而不是同时进行,是否有方法更改此行为

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#888"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".activities.TestActivity">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/PivotTheme" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="buttonHandler"
        android:text="test button 1" />


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true"
        android:background="@color/white">

        <TextView
            android:id="@+id/testTv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/purple_gradient_end"
            android:text="TestView" />

        <TextView
            android:id="@+id/testTv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="@color/purple_gradient_end"
            android:text="TestView" />

    </FrameLayout>

</LinearLayout>

我觉得这是安卓系统的一个缺陷,在安卓系统中,边距或宽度的变化无法设置触发动画的标志,但如果通过改变可见性来设置该标志,那么所有动画都会得到正确处理

对于该类型的更改..如更改参数..您也需要启用“更改”(animateLayoutChange必须为true)

val frmMain=findviewbyd(R.id.frmMain)
val currentTransitions=frmMain.layoutTransition
currentTransitions.enableTransitionType(LayoutTransition.Changeing)
frmMain.layoutTransition=currentTransitions
public void buttonHandler(View view){
    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) testTv.getLayoutParams();
    if(testDown) {
        params.setMargins(100, 400, 0, 0);
        params.width = 400;
        testTv2.setVisibility(View.GONE);// if I comment out this line, nothing will animate
        testDown = false;
    } else {
        params.setMargins(0, 0, 0, 0);
        params.width = 100;
        testTv2.setVisibility(View.VISIBLE);
        testDown = true;
    }
    testTv.setLayoutParams(params);
}
    val frmMain=findViewById<FrameLayout>(R.id.frmMain)

    val currentTransitions=frmMain.layoutTransition
    currentTransitions.enableTransitionType(LayoutTransition.CHANGING)
    frmMain.layoutTransition=currentTransitions