我正在尝试一个非常简单的用户界面,有一个EditText
和一个ImageView
。当我点击EditText时,我想接受来自用户的输入。现在当我点击ImageView(当键盘仍处于打开状态)时,我想禁用EditText,同时阻止软键盘关闭。但是setEnabled(false)会自动关闭软键盘。
这是我的能力:
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
final EditText editText = (EditText) findViewById(R.id.edit_text);
final ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText.setEnabled(false);
}
});
}
}
以下是用户界面:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.pearson.android.test.stackoverflow_efficient_data_construction_recyclerview.SecondActivity"
tools:showIn="@layout/activity_second">
<EditText
android:id="@+id/edit_text"
android:layout_width="300dp"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image_view"
android:layout_alignParentRight="true"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@android:color/holo_red_dark"/>
</RelativeLayout>
我试着像这样保持软键盘打开:
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
但是有一个非常明显的闪烁(好像旧键盘关闭并被新键盘取代)。
我也尝试过不禁用EditText(点击图片后我不能输入任何文字)并尝试操纵它的可聚焦性,但没有成功。
任何方向或解决方案都会受到最高的赞赏。
答案 0 :(得分:0)
尝试使用此代码隐藏键盘
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideKeyboard(getContext());
}
});
public static void hideKeyboard(Context ctx) {
InputMethodManager inputManager = (InputMethodManager) ctx
.getSystemService(Context.INPUT_METHOD_SERVICE);
View v = ((Activity) ctx).getCurrentFocus();
if (v == null)
return;
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}