Для EditText, как я могу позволить клавиатуре не покрывать это и некоторые другие представления? - PullRequest
1 голос
/ 06 января 2020

Фон

У меня есть EditText, который при фокусировке на нем должен показывать клавиатуру и все же показывать весь EditText, и мне может понадобиться включить несколько представлений ниже.

Проблема

Из-за некоторых требований мне нужно, чтобы EditText имел небольшой размер текста, но при этом имел минимальную высоту.

Я сделал фрагмент, чтобы сделать крошечный пример проблемы:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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" android:clipChildren="false"
    android:clipToPadding="false" tools:context=".MainActivity">

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/messageEditText" android:layout_width="0px" android:layout_height="wrap_content"
        android:hint="write here" android:minHeight="?attr/actionBarSize" android:textSize="12sp"
        app:layout_constrainedWidth="true" app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" tools:background="" />

</androidx.constraintlayout.widget.ConstraintLayout>

Когда я фокусируюсь на EditText, по какой-то причине я не вижу его строки:

enter image description here

В манифест, у меня есть android:windowSoftInputMode="adjustPan", потому что требование состоит в том, чтобы перемещать вещи, а не изменять их размеры.

То, что я пробовал

Я попытался добавить отступы и попытался добавить фальшивый нижний элемент. Они могут только добавить пустое пространство, но сделают линию еще дальше от показа.

Вопрос

Возможно ли, чтобы EditText имел эту минимальную высоту и размер текста, а также позволял ей при отображении клавиатуры отображается строка?

Можно ли даже показать немного больше под EditText? Не так приятно, чтобы EditText был так близко к клавиатуре. Я знаю, что в этом фрагменте у меня есть только EditText, но представьте, что у меня будет больше представлений под ним.

Ответы [ 3 ]

0 голосов
/ 06 января 2020

вы можете в наборе манифестов android windowSoftInputMode.

<activity
android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] > 
</activity>

В вашем состоянии, я думаю, вы должны использовать adjustPan. размер вашего окна не меняется, но содержимое переводится вверх. ниже в документе говорится о adjustPan:

Главное окно действия не изменено, чтобы освободить место для экранной клавиатуры. Скорее, содержимое окна автоматически панорамируется, так что текущий фокус никогда не скрывается клавиатурой, и пользователи всегда могут видеть, что они печатают. Как правило, это менее желательно, чем изменение размера, поскольку пользователю может потребоваться закрыть экранную клавиатуру, чтобы получить доступ к скрытым частям окна и взаимодействовать с ними.

, если вы не хотите переводить макет представления содержимого. , что делает экран прокрутки контента. Вы можете использовать adjustResize

, если вы хотите узнать больше, вы можете прочитать официальный документ

0 голосов
/ 09 января 2020

Нет пути. Существует только 3 способа реагирования при открытии клавиатуры:

1) Ничего не делать 2) Изменить размер 3) Панорамирование, чтобы линия с курсором находилась на экране.

Нет способа чтобы сделать что-то еще, и приложение не отправляет надежный сигнал, который показывает клавиатура, вы можете ответить. В частности, нет способа гарантировать, что линия в нижней части EditText будет отображаться на экране.

Лучшее, что вы можете сделать, это попытаться убедиться, что вы изменили размер, и аккуратно расположить ваш контент так, чтобы изменение размера оказывает минимальное влияние на показанный интерфейс. Но это может или не может быть возможным, в зависимости от особенностей пользовательского интерфейса. И вы не показали нам достаточно того, что вы пытаетесь сделать, чтобы дать вам рекомендации по этому вопросу.

0 голосов
/ 06 января 2020

Используйте код в AndroidManifest. xml file:

<activity
        android:name="com.example.MainActivity"
        android:label="@string/activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" />

Этот код работал для меня. Внутри файла манифеста в теге активности добавьте этот атрибут:

android: windowSoftInputMode = "AdjustResize | stateHidden"

...