Как добавить маржу между EditText и Soft Keyboard?
Я хочу добавить поле 10dp между EditText и Soft Keyboard.
Вот мой 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 не работают.