Я хочу создать вид над мягкой клавиатурой - PullRequest
0 голосов
/ 10 июля 2019

Я занимаюсь разработкой Android Soft Keyboard. Я хочу создать макет над Soft Keyboard. Всякий раз, когда на экране отображается клавиатура, раскладка должна быть видимой.

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Как отметил Джавад Ахменд в комментариях, можно прикрепить раскладку к верхней части клавиатуры, прикрепив ее к родительской нижней части, используя ConstraintLayout. По сути, вам необходимо выполнить следующие шаги:

  1. Установите windowSoftInputMode как adjustResize для вашей активности в манифесте.
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustResize"
        android:theme="@style/AppTheme.NoActionBar">
    
  2. Установите свой макет visibility в исходное состояние и добавьте ограничение макета, прикрепив его нижнюю часть к нижней части родительского элемента.
    <LinearLayout android:id="@+id/layout_B"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone">
    
  3. Далее необходимо следить за состоянием программной клавиатуры. Для краткости воспользуемся KeyboardVisibilityEvent библиотекой . Добавьте следующую строку в build.gradle вашего приложения и синхронизируйте его.
    implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.3.0'
    
  4. Добавьте слушателя клавиатуры в свою деятельность, чтобы ваш layout_B стал видимым, когда клавиатура открывается и все готово.
    KeyboardVisibilityEvent.setEventListener(this) { keyboardIsOpen ->
        layout_B.visibility = if (keyboardIsOpen) {
            View.VISIBLE
        } else {
            View.GONE
        }
    }
    
0 голосов
/ 10 июля 2019

Если вы пишете клавиатуру, это легко.Просто переопределите onCreateInputView, чтобы вернуть желаемое представление.Это может быть линейный макет с вашими дополнительными видами и самой клавиатурой.

Большая проблема, которую я вижу, это то, что у вас есть EditText там.Это не сработает.Нажатие на EditText приведет к разрыву InputConnection с реальным приложением и вызовет ... неизвестное странное поведение.Я даже не уверен, будет ли поведение определяться в разных версиях ОС.Это может привести к немедленному скрытию клавиатуры.Это может привести к тому, что клавиатура вообще перестанет работать.ОС не предназначена для этого.

...