Как избежать мягкой клавиатуры, подталкивающей мой макет?
У меня есть набор кнопок навигации, расположенных внизу каждой операции. В некоторых действиях мне нужно найти текст поиска вверху. Однако всякий раз, когда пользователь вводит что-то в текстовом виде, мягкая клавиатура всегда подталкивает мои кнопки навигации, даже если она фактически не блокирует текстовое изображение. Это делает мой интерфейс странным. Как я могу заставить свои кнопки навигации оставаться статичными там, где они есть, даже не будучи нажатыми с помощью мягкой клавиатуры? Я попытался установить Activity ActivitySoftInputMode, но ни одна из конфигураций не помогает.
Любые предложения?
Благодаря
Ответы
Ответ 1
У меня была такая же проблема, и я сначала добавил:
<activity
android:name="com.companyname.applicationname"
android:windowSoftInputMode="adjustPan">
в файл манифеста. Но это само по себе не решило проблему. Затем, как упоминал Артем Русаковский, я добавил:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:isScrollContainer="false">
</ScrollView>
в scrollview.
Это то, что сработало для меня.
Ответ 2
В моем случае причина, по которой кнопки были выдвинуты, заключалась в том, что вид над ними был ScrollView
, и он обрушился с кнопками, выдвинутыми вверх над клавиатурой, независимо от того, какое значение android:windowSoftInputMode
я устанавливал.
Мне удалось избежать того, что нижняя строка кнопок была нажата мягкой клавиатурой, установив
android:isScrollContainer="false"
на ScrollView
, который находится над кнопками.
Ответ 3
Чтобы решить эту проблему, просто добавьте android:windowSoftInputMode="stateVisible|adjustPan
к этой активности в файле манифеста android. например
<activity
android:name="com.comapny.applicationname.activityname"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible|adjustPan"/>
Ответ 4
Для будущих читателей.
Мне нужен конкретный контроль над этой проблемой, поэтому я это сделал:
Из фрагмента или действия скройте ваши другие представления (которые не нужны, когда клавиатура встала), затем восстановите их, чтобы решить эту проблему:
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
//ok now we know the keyboard is up...
view_one.setVisibility(View.GONE);
view_two.setVisibility(View.GONE);
} else {
//ok now we know the keyboard is down...
view_one.setVisibility(View.VISIBLE);
view_two.setVisibility(View.VISIBLE);
}
}
});
Ответ 5
windowSoftInputMode будет либо панорамировать, либо изменять размер макета вашей активности. Единственное, что вы можете сделать, это подключить прослушиватель onFocusChanged к вашему EditText, и когда пользователь выбирает/записывает EditText, вы скрываете или перемещаете навигационные кнопки из экрана. Когда EditText теряет фокус, вы можете переместить навигационные кнопки в нижней части действия.
Ответ 6
У меня была та же проблема, но установка windowSoftInputMode
не помогла, и я не хотел менять верхний вид, чтобы иметь isScrollContainer="false"
, потому что я хотел, чтобы он прокручивался.
Мое решение состояло в том, чтобы определить верхнее расположение инструментов навигации, а не снизу. Я использую Titanium, поэтому я не уверен точно, как это будет переводиться на Android. Определение верхнего расположения представления навигационных инструментов не позволяло мягкой клавиатуре подталкивать его вверх и вместо этого охватывало навигационные элементы управления, как я хотел.
Ответ 7
Решил его, установив непослушный EditText:
etSearch = (EditText) view.findViewById(R.id.etSearch);
etSearch.setInputType(InputType.TYPE_NULL);
etSearch.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
etSearch.setInputType(InputType.TYPE_CLASS_TEXT);
return false;
}
});