У меня есть EditText, и появляется ли мягкая клавиатура, когда пользователь нажимает на нее, кажется, меняется, и я не понимаю, почему.Проблема с мягкой клавиатурой не появляется, когда EditText получает фокус
Первоначально мой макет был таким, как показано ниже, и клавиатура выглядела так, как ожидалось. Пользователь будет щелкать по EditText, содержимое будет выделено, клавиатура будет отображаться, и также будет запущен какой-то пользовательский код. Однако, поскольку я пытаюсь изменить макет и, в частности, меняя LinearLayout с горизонтальной на вертикальную ориентацию, это перестало работать. Теперь, когда пользователь нажимает на EditText, содержимое по-прежнему подсвечивается, но клавиатура не отображается.
Вот XML, в котором работает код. Простое изменение ориентации на «вертикаль» и изменение высоты/ширины и удаление веса достаточно, чтобы остановить отображение клавиатуры. Я изначально добавил focusable/focusableintouchmode к родительскому RelativeLayout, потому что у меня возникла проблема с EditText, которая сразу же начала фокусироваться при запуске Activity, и это решило проблему.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ocrmain_group_select_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true" >
<LinearLayout android:id="@+id/ocrmain_group_select_costholder"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" >
<ImageView android:id="@+id/ocrmain_group_select_item"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="15"
android:layout_gravity="left" />
<EditText android:id="@+id/ocrmain_group_select_cost"
android:focusable="true" android:focusableInTouchMode="true"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:selectAllOnFocus="true"
android:imeOptions="actionDone"
android:inputType="numberDecimal" />
</LinearLayout>
По существу я пытаюсь изменить его к этому:
<LinearLayout android:id="@+id/ocrmain_group_select_costholder"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" >
<ImageView android:id="@+id/ocrmain_group_select_item"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText android:id="@+id/ocrmain_group_select_cost"
android:layout_gravity="end"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true"
android:selectAllOnFocus="true"
android:imeOptions="actionDone"
android:inputType="numberDecimal" />
</LinearLayout>
Вот некоторые из пользовательского кода у меня есть, когда пользователь нажимает на нее.
private class myCostBoxChangedListener implements EditText.OnEditorActionListener {
@SuppressLint("NewApi")
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
//ScrollView sView = (ScrollView) ((RelativeLayout)v.getParent().getParent()).getChildAt(1);
//TableLayout tView = (TableLayout) sView.getChildAt(0);
if (actionId == EditorInfo.IME_ACTION_DONE) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
calculateCheckedDialogCosts();
}
return false;
}
}
Я также имею onFocusListener реализован, но он работает код, чья единственная роль для разбора и потенциально изменять содержимое EditText при нажатии на кнопку «Готово».
Вся помощь оценивается!