【发布时间】:2016-12-16 02:51:47
【问题描述】:
我正在尝试一个非常简单的 UI,有一个 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(单击图像后我应该无法输入任何文本)并尝试操纵其可聚焦性,但没有成功。
任何方向或解决方案将不胜感激。
【问题讨论】:
-
为什么要保持软键盘打开,即使用户不应该能够键入它?那是糟糕的设计,用户不会知道发生了什么。
-
我实际上正在努力解决同样的问题。例如:有 4 个按钮,每个按钮显示一个新的 Search EditText 来代替旧的。旧的动画出来并被禁用,新的动画进入。我想在 EditText 字段发生变化时保持键盘向上。上述方法均无效。
标签: android android-edittext android-softkeyboard