【问题标题】:TextInputLayout shared element transition issueTextInputLayout 共享元素过渡问题
【发布时间】:2018-03-01 12:23:41
【问题描述】:

我们开始:两个具有共享元素转换(按钮)的活动。第二个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));
        }
    }
}

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

【问题讨论】:

  • 你的共享元素是什么?你预计会发生什么?
  • 共享元素是按钮,从示例代码中可以看出。期望是,TextInputLayout 的提示作为 Activity 转换的一部分被正确地动画化,就像视图的其余部分一样(查看视频中 EditText 背景的正确转换)。
  • 请澄清您的问题。您的动画 GIF 看起来不错,我们已经掌握了。是很酷的动画。但我不明白,有什么问题?它在哪里?如果蓝线向上移动,我会看到什么。就这样。然后在输入字段下会出现一个短暂的闪烁 -- 行。是预期的吗?不期待吗?什么?
  • TextInputLayout 的提示不是动画的,在过渡到第二个 Activity 后立即显示。闪烁的线是在 Activity 过渡结束时出现的 EditText 的背景。蓝线是第二个 Activity 动画时的状态栏。这里没有什么很酷或特别的,只是上面显示的代码。

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


【解决方案1】:

适用于 API 21+

android:transitionGroup="true"

TextInputLayout 中添加这一行。它会修复它。或者,如果您有几个 TextInputLayout,则将该行添加到他们的容器中。

【讨论】:

    【解决方案2】:

    我认为它的错误是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>
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-04-23
        • 2015-12-09
        • 2016-02-04
        • 2018-07-14
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-29
        相关资源
        最近更新 更多