Почему мой макет не поднимается достаточно с «AdjustPan»? - PullRequest
0 голосов
/ 06 февраля 2019

У меня были некоторые проблемы с использованием adjustPan в моем приложении, так как оно не работает так, как должно.Некоторые другие пользователи также сталкивались с этой проблемой, поэтому я думаю, что важно поделиться этой проблемой ( При нажатии EditText раскладка не поднимается достаточно).

Примечание: Я использую Android Studio и Я использую «Мгновенное приложение», поэтому расположение файлов будет немного другим.

Когда я использую adjustPan в моей раскладке, моя активность недостаточно перемещается до точки, где над программной клавиатурой появляется EditText (подробности см. На рисунке).Тот же самый результат все еще появляется независимо от того, используете ли вы его в файле манифеста или файле Java.

Не только это, но и самая странная часть в том, что строка состояния становится прозрачной , а темно-синяя полоса, которая должна идти за значками уведомлений, немного уходит вниз бит (см. изображение для получения подробной информации).

Screenshot of issue

Я попытался сделать несколько попыток решить эту проблему, например, используя adjustResize и setOnTouchListener, нооба эти ответа, которые я получил, не решили эту проблему.

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

Вот мой код:

Файл манифеста:

<activity
        android:name=".Input_Activity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan" />

Файл Java:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;

public class Input_Activity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input__activity);

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
   }
}

Файл XML:

<android.support.constraint.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"
tools:context=".Input_Activity">

<EditText
    android:layout_width="214dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:inputType="number|numberDecimal"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.585"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.725" />

Все отзывы будут оценены.

Ответы [ 4 ]

0 голосов
/ 15 февраля 2019
android:windowSoftInputMode

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

Ниже изображение может прояснить ваши сомнения подробнее enter image description here

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

Я думаю, что нет необходимости добавлять код, который вы добавили ниже.

getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

0 голосов
/ 09 февраля 2019

создайте объект наподобие InputMethodManager methodManager на уровне класса.
добавьте эти строки в ваш метод onCreate(),

methodManager = (InputMethodManager) this.getSystemService(this.INPUT_METHOD_SERVICE);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

и в вашем методе onClick () покажите, как клавиатура,

methodManager.toggleSoftInputFromWindow(
    your_view_name.getApplicationWindowToken(),
    InputMethodManager.SHOW_FORCED, 0);  

Если это слово getApplicationWindowToken выдает ошибку, замените ее на getWindowToken
надеюсь, это поможет.

0 голосов
/ 09 февраля 2019

Я не уверен насчет ответа.но попробуйте заменить

<activity
    android:name=".Input_Activity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan" />

на

<activity
    android:name=".Input_Activity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustResize" />

в вашем манифесте Android. Читайте здесь

Надеюсь, это поможет!

0 голосов
/ 06 февраля 2019

Также необходимо добавить следующий код в событие onTouch, чтобы при появлении программной клавиатуры она поднималась.Пример:

 editText.setTransformationMethod(WordBreakUtil.getInstance());
 editText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
            return false;
        }
    });
...