Как добавить маржу между EditText и Soft Keyboard?

Я хочу добавить поле 10dp между EditText и Soft Keyboard.

enter image description here Вот мой XML:

<RelativeLayout
    android:id="@+id/BottomLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@drawable/bottom_glass" >

    <EditText
        android:id="@+id/message"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/grey"
        android:ems="10"
        android:layout_marginBottom="10dp"
        android:hint="Enter Message"
        android:textColor="#ffffff" >


    </EditText>

    <ImageButton
        android:id="@+id/sendMessageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/message"
        android:background="@android:color/transparent"
        android:src="@drawable/sendselector" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="20dp"
        android:layout_toLeftOf="@+id/message"
        android:background="@android:color/transparent"
        android:src="@drawable/sendmediaselector" />

</RelativeLayout>

Вот мой onCreate():

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    messageText.setOnTouchListener(new OnTouchListener(){

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                            ((Swipe)getActivity()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED);
                    return false;
                }});

Я использую viewpager и полноэкранную тему. Следующий EditText находится в моем третьем фрагменте.

Я использовал android:windowSoftInputMode="adjustResize|adjustPan" и android:windowSoftInputMode="adjustResize", но ничего не произошло.

Ответы

Ответ 1

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

<RelativeLayout   
  android:layout_width="match_parent"   
  android:layout_height="110dp"> 
  <ImageView
     android:layout_width="match_parent"
     android:layout_height="100dp"
     android:background="@drawable/your_edit_text_background"/>   
  <EditText
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingBottom="10dp"/> 
</RelativeLayout>

Это сделает ваш запас клавиатуры вашим editText на 10dp

Ответ 2

Это похоже на работу, хотя и оказывает некоторое нежелательное влияние на макет.

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

Если кто-нибудь знает, как это работает с ADJUST_PAN, это было бы здорово!

Ответ 3

Я решил ту же проблему, добавив только две строки

Добавьте эту строку в EditText -

android:imeOptions="actionSend|flagNoEnterAction"

и эта строка в файле Manifeast в теге Activity add -

<activity
            android:name="----"
            android:icon="---"
            android:windowSoftInputMode="stateVisible|adjustResize"
            android:label="@string/app_name"
            android:theme="-----" />

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

Ответ 4

Попробуйте добавить свой RelativeLayout в ScrollView, а затем добавьте следующий код:

editTextField.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO Auto-generated method stub
        if (hasFocus)
             scrollView.scrollBy(0, 150);

    });

Ответ 5

Добавление android:windowSoftInputMode="adjustResize" к действию в манифесте должно решить проблему. И это не сработает, если ваша деятельность выполняется в полноэкранном режиме. Так что в этом случае вместо того, чтобы сделать его полноэкранным с помощью кода, просто добавьте или измените стиль <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> на style.xml и используйте его в качестве вашей AppTheme. AdjustResize или AdjustPan оба будут работать.

Ответ 6

Ответ Василия Кабунова работает для меня, но его ответ нуждается в небольшом изменении для работы. Следующий код:

editTextField.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO Auto-generated method stub
        if (hasFocus) {
                Handler(Looper.getMainLooper()).postDelayed({
                    //Take care with this line I think that the scroll moves in px and not with dp.
                    scrollView.scrollBy(0, 80)
                }, 100) //You need to play with the time if your activity comes from onCreate and onResume you need to change this value to 1000.
            }

    });
}

И вам нужно добавить в ScrollView или RecyclerView следующие строки:

android:paddingBottom="80dp"
android:clipToPadding="false"

ВАЖНО: если вы активировали полноэкранный режим, флажки AdjustResize и AdjustPan не работают.