Проблема с переходом общего элемента TextInputLayout

Итак, начнем: два действия с общим переходом элемента (кнопка). Второй 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));
        }
    }
}

EDIT: эту ошибку можно «исправить», добавив фон во второй макет Activity.

без фонас фоном


person artkoenig    schedule 20.09.2017    source источник
comment
Какой у вас общий элемент? Что вы ожидаете?   -  person azizbekian    schedule 25.09.2017
comment
Общий элемент — это кнопка, как видно из примера кода. Ожидается, что подсказка TextInputLayout правильно анимирована как часть перехода Activity, как и остальная часть представления (посмотрите на правильный переход фона EditText в видео).   -  person artkoenig    schedule 26.09.2017
comment
Пожалуйста, уточните свой вопрос. Ваш анимированный GIF выглядит красиво, он у нас есть. Это довольно крутая анимация. Но я не могу понять, в чем проблема? где это находится? Что я вижу, если синяя линия движется вверх. Это все. И затем короткое мигание -- под полем ввода появляется строка. Это ожидается? Разве не ожидается? Втф?   -  person babay    schedule 28.09.2017
comment
Подсказка TextInputLayout не анимируется и появляется сразу после начала перехода ко второму Activity. Мигающая линия — это фон EditText, который появляется в конце перехода Activity. Синяя линия — это строка состояния второй Activity, пока она анимирована. Здесь нет ничего интересного или особенного, просто код, показанный выше.   -  person artkoenig    schedule 29.09.2017


Ответы (3)


для API 21+

android:transitionGroup="true"

Добавьте эту строку в TextInputLayout. Это бы исправить. Или, если у вас есть несколько TextInputLayout, добавьте эту строку в их контейнер.

person Jurij Pitulja    schedule 20.02.2018

Я думаю, что это ошибка 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>
person Marzi Heidari    schedule 28.09.2017

Кажется, это ошибка. Я отправил новую проблему.

Этого можно избежать, определив android:background для второго действия.

person artkoenig    schedule 15.11.2017