TextInputLayout 共享元素过渡问题
Posted
技术标签:
【中文标题】TextInputLayout 共享元素过渡问题【英文标题】:TextInputLayout shared element transition issue 【发布时间】: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_
android:layout_
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<Button android:layout_ android:layout_
android:text="GO"
android:transitionName="test"/>
<android.support.design.widget.TextInputLayout android:layout_
android:layout_
android:hint="WTF?!">
<android.support.design.widget.TextInputEditText android:layout_
android:layout_/>
</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 动画时的状态栏。这里没有什么很酷或特别的,只是上面显示的代码。 【参考方案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_
android:layout_
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<Button
android:layout_
android:layout_
android:text="GO"
android:transitionName="test" />
<android.support.design.widget.TextInputEditText
android:layout_
android:layout_
android:hint="WTF?!" />
</LinearLayout>
【讨论】:
【参考方案3】:似乎是一个错误。我提交了new issue。
您可以通过为第二个活动定义 android:background
来避免这种情况。
【讨论】:
以上是关于TextInputLayout 共享元素过渡问题的主要内容,如果未能解决你的问题,请参考以下文章