EditText 获得焦点时软键盘不出现的问题
Issue with soft keyboard not appearing when EditText gains focus
我有一个 EditText,当用户点击它时是否出现软键盘似乎有所不同,我不明白为什么。
原来我的布局是这样的,按预期会出现键盘。用户单击 EditText,内容将突出显示,键盘将显示,一些自定义代码也会 运行。但是,由于我正在尝试更改布局,特别是将 LinearLayout 从水平方向更改为垂直方向,因此它已停止工作。现在,当用户点击 EditText 时,内容仍然突出显示,但键盘不显示。
这里是代码工作的 XML 处。只需将方向更改为 'vertical' 并修改 height/width 并移除重量就足以阻止键盘显示。我最初将 focusable/focusableintouchmode 添加到父级 RelativeLayout,因为我遇到了 Activity 启动时 EditText 立即获得焦点的问题,这解决了问题。
<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,但它 运行 是一些代码,其唯一作用是在按下 'Done' 按钮时解析并可能修改 EditText 的内容。
感谢所有帮助!
我解决了我自己的问题:我将以下代码插入到我的 onFocusChangeList 中:
private class myCostBoxFocusListener implements View.OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(v, InputMethodManager.SHOW_FORCED);
现在,当单击 EditText 时,它会突出显示并且会出现键盘以便立即编辑。甜
我有一个 EditText,当用户点击它时是否出现软键盘似乎有所不同,我不明白为什么。
原来我的布局是这样的,按预期会出现键盘。用户单击 EditText,内容将突出显示,键盘将显示,一些自定义代码也会 运行。但是,由于我正在尝试更改布局,特别是将 LinearLayout 从水平方向更改为垂直方向,因此它已停止工作。现在,当用户点击 EditText 时,内容仍然突出显示,但键盘不显示。
这里是代码工作的 XML 处。只需将方向更改为 'vertical' 并修改 height/width 并移除重量就足以阻止键盘显示。我最初将 focusable/focusableintouchmode 添加到父级 RelativeLayout,因为我遇到了 Activity 启动时 EditText 立即获得焦点的问题,这解决了问题。
<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,但它 运行 是一些代码,其唯一作用是在按下 'Done' 按钮时解析并可能修改 EditText 的内容。
感谢所有帮助!
我解决了我自己的问题:我将以下代码插入到我的 onFocusChangeList 中:
private class myCostBoxFocusListener implements View.OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(v, InputMethodManager.SHOW_FORCED);
现在,当单击 EditText 时,它会突出显示并且会出现键盘以便立即编辑。甜