Как гибко скрыть / показать вид, когда программная клавиша видна при ограничении - PullRequest
0 голосов
/ 09 октября 2019

У меня есть экран входа в систему с логотипом и полем для ввода учетных данных для входа в систему, и я хочу скрыть логотип, когда клавиатура видна так же, как приложение payoneer, и я сделал это с помощью макета ограничений и определения фокуса при редактировании текста и при нажатой клавише back.myявляется то, что расположение ограничений не является гибким при скрытии видов.

Payoneer login screen

my login screen

мой экран входаxml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.activity.login.LoginActivity">


        <ImageView
            android:id="@+id/logo"
            android:layout_width="156dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="60dp"
            android:adjustViewBounds="true"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_logo" />

        <ImageView
            android:id="@+id/footer"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:srcCompat="@drawable/ic_splash_footer" />

        <TextView
            android:id="@+id/login_label"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:gravity="center|start"
            android:maxLines="1"
            android:minHeight="60dp"
            android:paddingStart="6dp"
            android:paddingEnd="6dp"
            android:text="@string/log_in"
            android:textColor="@color/colorAccent"
            android:textSize="40sp"
            app:layout_constraintBottom_toTopOf="@+id/username_label"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/logo"
            app:layout_constraintVertical_chainStyle="packed"
            tools:background="@color/toolsbackground" />

        <TextView
            android:id="@+id/username_label"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="26dp"
            android:gravity="center|start"
            android:maxLines="1"
            android:minHeight="24dp"
            android:paddingStart="6dp"
            android:text="Username"
            android:textColor="@color/colorAccent"
            android:textSize="16sp"
            app:layout_constraintBottom_toTopOf="@+id/username"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/login_label"
            tools:background="@color/toolsbackground" />

        <com.islam.custom.CustomEditText
            android:id="@+id/username"
            android:layout_width="300dp"
            android:layout_height="60dp"
            android:background="@drawable/ic_rectangle_border_10_gray"
            android:gravity="center|start"
            android:hint="@string/prompt_email"
            android:inputType="textEmailAddress"
            android:maxLines="1"
            android:paddingStart="20dp"
            android:paddingEnd="20dp"
            android:selectAllOnFocus="true"
            app:layout_constraintBottom_toTopOf="@+id/password_label"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/username_label" />

        <TextView
            android:id="@+id/password_label"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:gravity="center|start"
            android:maxLines="1"
            android:minHeight="24dp"
            android:paddingStart="6dp"
            android:text="@string/password"
            android:textColor="@color/colorAccent"
            android:textSize="16sp"
            app:layout_constraintBottom_toTopOf="@+id/password"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/username"
            tools:background="@color/toolsbackground" />

        <com.islam.custom.CustomEditText
            android:id="@+id/password"
            android:layout_width="300dp"
            android:layout_height="60dp"
            android:background="@drawable/ic_rectangle_border_10_gray"
            android:gravity="center|start"
            android:hint="@string/prompt_password"
            android:imeActionLabel="@string/action_sign_in_short"
            android:imeOptions="actionDone"
            android:inputType="textPassword"
            android:maxLines="1"
            android:paddingStart="20dp"
            android:paddingEnd="20dp"
            android:selectAllOnFocus="true"
            app:layout_constraintBottom_toTopOf="@+id/login"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/password_label" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_marginEnd="48dp"
            android:enabled="false"
            android:text="@string/action_sign_in"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.93"
            app:srcCompat="@drawable/ic_back_floating"
            app:tint="@color/white" />

        <ProgressBar
            android:id="@+id/loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="@+id/password"
            app:layout_constraintStart_toStartOf="@+id/password"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.3" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

1 Ответ

2 голосов
/ 09 октября 2019

Я создаю нечто похожее, создавая KeyboardListener, подобный этому (https://stackoverflow.com/a/25681196/11136689) после того, как вы получите разницу в высоте, вы можете анимировать элементы так, как вы хотите. Например, вы можете сделать анимацию перехода, подобную этой.

Перед тем, как что-либо анимировать с помощью TransitionManager, вам нужно сохранить исходный ConstraintSet, например, так:

ConstraintSet originalConstraintSet = new ConstraintSet();
originalConstraintSet.clone(constraintLayout); // This is the ConstraintSet from your ConstraintLayout which you build in xml.

Теперь вам нужно настроить новый ConstraintSet, выполнив это:

ConstraintSet compactConstraintSet = new ConstraintSet();
compactConstraintSet = clone(constraintLayout);

Далеевам нужно настроить положение ваших элементов в ConstraintLayout следующим образом:

compactConstraintSet.connect
            (userNameTextView.getId(),ConstraintSet.TOP,
                    ConstraintSet.PARENT_ID, ConstraintSet.TOP,
                    heightdifference); // You can add margin.

После того, как вы сделали это для каждого элемента, который вы хотите переместить, вам просто нужно выполнить следующее

AutoTransition transition = new AutoTransition();
        transition.setDuration(250); //The animation speed in ms

        transition.addListener(new Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {
                isAnimationRunning = true;
            }

            @Override
            public void onTransitionEnd(Transition transition) {

            }

            @Override
            public void onTransitionCancel(Transition transition) {

            }

            @Override
            public void onTransitionPause(Transition transition) {

            }

            @Override
            public void onTransitionResume(Transition transition) {

            }
        });
TransitionManager.beginDelayedTransition(constraintLayout, transition);
compactConstraintSet.applyTo(viewHolder.rootView); // here you apply the constraintSet how you want the view should look like after transition

А для анимации назад вы можете сделать то же самое с исходным набором ограничений:

TransitionManager.beginDelayedTransition(constraintLayout, transition);
            originalConstraintSet.applyTo(constraintLayout);

Если вы внесли изменения в представление, такое как значение альфа, и применили его также к compactConstraintSet, тогда будет анимацияна альфа зрения.

Надеюсь, я мог бы дать вам идею, как решить эту проблему.

Happy Codiнг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...