我有一个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的内容。按下按钮。
所有帮助表示赞赏!
答案 0 :(得分:1)
我解决了自己的问题:我将以下代码插入到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时,它会突出显示并且键盘会立即进行编辑。甜。