TextInputLayout共享元素转换问题

时间:2017-09-20 12:26:19

标签: android android-transitions shared-element-transition

我们开始:两个具有共享元素转换的活动(Button)。第二个Activity有一个带有提示的TextInputLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:focusable="true"
              android:focusableInTouchMode="true"
              android:gravity="center_horizontal"
              android:orientation="vertical">

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="GO"
            android:transitionName="test"/>

    <android.support.design.widget.TextInputLayout android:layout_width="match_parent"
                                                   android:layout_height="wrap_content"
                                                   android:hint="WTF?!">
        <android.support.design.widget.TextInputEditText android:layout_width="match_parent"
                                                         android:layout_height="wrap_content"/>
    </android.support.design.widget.TextInputLayout>
</LinearLayout>   

第二个Activity的输入转换被延迟以澄清问题:TextInputLayout的提示忽略转换动画并在转换开始后立即显示。在动画结束时,您可以在提示下方看到正确设置动画的EditText背景(水平线)。这是一个错误还是我错过了什么?这是第二个Activity

public class SecondActivity extends AppCompatActivity {

    public static void launch(Activity activity, View sharedElement) {
        Intent intent = new Intent(activity, SecondActivity.class);

        ActivityOptionsCompat options = ActivityOptionsCompat.
                makeSceneTransitionAnimation(activity, sharedElement, "test");
        activity.startActivity(intent, options.toBundle());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().setEnterTransition(new Slide().setDuration(5000));
        }
    }
}

编辑:可以通过在第二个活动的布局中添加背景来“修复”此错误。

without background with background

3 个答案:

答案 0 :(得分:5)

for API 21+

android:transitionGroup="true"

TextInputLayout中添加此行。它会解决它。或者,如果您有一些TextInputLayout,那么将该行添加到其容器中。

答案 1 :(得分:0)

我认为它是TextInputLayout的错误。我删除了它,我给了TextInputEditText提示,它按预期工作。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GO"
        android:transitionName="test" />


    <android.support.design.widget.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="WTF?!" />

</LinearLayout>

答案 2 :(得分:0)

似乎是一个错误。我提交了new issue

您可以通过为第二项活动定义android:background来避免这种情况。