Подтвердить что ты не робот

Мягкая клавиатура скрывает половину EditText

У меня есть listview, а последний элемент списка содержит EditText:

<RelativeLayout
    android:id="@+id/contentLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="30dp"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/messageEditText"
        android:layout_below="@+id/messageEditText"
        android:layout_marginRight="14dp"
        android:src="@drawable/test" />

    <EditText
        android:id="@+id/messageEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/sendImageButton"
        android:ems="10"
        android:gravity="top"
        android:hint="@string/messageEditText"
        android:inputType="textMultiLine"
        android:minHeight="55dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="10dp" />

    <ImageButton
        android:id="@+id/sendImageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/messageEditText"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@id/messageEditText"
        android:adjustViewBounds="true"
        android:maxHeight="55dp"
        android:maxWidth="55dp"
        android:padding="12dp"
        android:scaleType="centerInside"
        android:src="@drawable/sendmessage" />

</RelativeLayout>

Половина текста EditText скрыта. Я также не могу прокручивать список. Любое решение?

image

4b9b3361

Ответ 1

Решением было установить атрибут android:softInputMode в adjustResize в манифесте и поместить макет (а не макет списка) внутри ScrollView.

Ответ 2

У меня была аналогичная проблема, затем я использовал android:windowSoftInputMode="adjustResize|stateHidden", как упоминалось здесь. Это очень хорошо работает для меня..

Ответ 3

Отключить клавиатуру при запуске окна

this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );

Ответ 4

Установите атрибут android:softInputMode для элемента Activity в манифесте.

Смотрите Документацию манифеста для получения полного списка допустимых значений и их эффекта. Те, кто вас интересует, скорее всего, будут adjustPan и adjustResize.

Ответ 5

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

Итак, вот обходное решение, которое поместит этот беспорядок позади вас. он будет работать без обходного пути ScrollView или передачи вашего полного экрана.

  • Добавьте эту удивительную библиотеку в ваш файл gradle:

compile'net.yslibrary.keyboardvisibilityevent: keyboardvisibilityevent: 1.0.1

  1. Убедитесь, что ваша активность имеет следующие настройки клавиатуры:

Android: windowSoftInputMode = "adjustResize"

  1. оберните свой EditText вертикальным LinearLayout и добавьте View with Visibility of Gone:

    <com.ylimitapp.ylimitadmin.views.NormalFontEditText
        android:id="@+id/input_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textCapSentences|textMultiLine"
        android:imeOptions="actionSend"
        android:paddingStart="20dp"
        android:paddingEnd="40dp"
        android:paddingTop="10dp"
        android:maxHeight="120dp"
        android:adjustViewBounds= "true"
        android:scrollHorizontally="false"
        android:textColorHint="#7b7b7b"
        android:hint="@string/type_your_message"
        android:background="@drawable/msg_inputfield_bg"
        android:textColor="@color/black_text_color"
        android:textSize="15.33sp"
        />
    
        <View
            android:id="@+id/keyboard_view"
            android:layout_width="match_parent"
            android:layout_height="20dp"
            android:visibility="gone"
            />
    
    </LinearLayout>
    
  2. рассчитать размер экрана, чтобы вы могли подсчитать высоту представления, которое нажимает EditText:

    private void storeScreenHeightForKeyboardHeightCalculations() {
                Rect r = new Rect();
                View rootview = getActivity().getWindow().getDecorView(); 
                rootview.getWindowVisibleDisplayFrame(r);
                mOriginalScreenHeight = r.height();
    
                Rect rectangle = new Rect();
                Window window = getActivity().getWindow();
                window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
                int statusBarHeight = rectangle.top;
                int contentViewTop =
                        window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
                int titleBarHeight= contentViewTop - statusBarHeight;
    
                if (titleBarHeight == 0) {
                    mOriginalScreenHeight -= (24 * Utils.getDensity(getContext()));
                }
            }
    
    1. Добавить прослушиватель для открытия и закрытия клавиатуры, а затем установить высоту представления под EditText во время выполнения, чтобы мы правильно установили высоту на любом устройстве и пользовательских клавиатурах. затем просто сделайте его видимым, когда клавиатура открыта:
private void addkeyBoardlistener() {
           KeyboardVisibilityEvent.setEventListener(
                            getActivity(),
                            new KeyboardVisibilityEventListener() {
                                @Override
                                public void onVisibilityChanged(boolean isOpen) {
                                    if (isOpen) {
                                        Rect r = new Rect();
                                        View rootview = getActivity().getWindow().getDecorView(); // this = activity
                                        rootview.getWindowVisibleDisplayFrame(r);
                                        int keyboardHeight = (mOriginalScreenHeight - r.height());
                                        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) keyboard_view.getLayoutParams();
                                        params.height = (int) ((keyboardHeight + 5 * Utils.getDensity(getContext())));
                                        keyboard_view.setLayoutParams(params);
                                        keyboard_view.setVisibility(View.VISIBLE);
                                    } else {
                                        keyboard_view.setVisibility(View.GONE);
                                    }
                                }
                            });
                }

Еще раз я все еще удивляюсь, что мне пришлось потратить 3 часа своего времени на решение такой тривиальной потребности.

Результат: