不可聚焦的元素,可触摸可调

时间:2017-09-05 14:42:05

标签: android

我有一个editText,我想自动填写表单中其他控件的信息,同时允许更改其内容,但不鼓励用户这样做。

所以我将此控件设置为不可聚焦,因此当您按下actionNext时,它会移动到下一个控件。但是,如果单击编辑文本,我想允许用户更改其内容。

这就是我所做的:

  mNameEditText.setFocusable(false);
        mNameEditText.setFocusableInTouchMode(false);
        mNameEditText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mNameEditText.setFocusableInTouchMode(true);
                mNameEditText.requestFocusFromTouch();
                mNameEditText.setFocusable(true);
            }
        });

然而,这非常奇怪,结果是当你点击时,你可以编辑,但突然下一个控件(一个AutoCompleteTextView)不再可调焦了!实际上看起来焦点仍然在编辑文本上并同时转到autocompletetextview,如下所示:

enter image description here

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

  • 制作文字修改视图的子类
  • 在您的视图中使用
  • 将其enabled属性设置为false
  • 覆盖子类中的触摸处理程序:触摸文本编辑视图时,立即启用视图并将其聚焦。当焦点丢失时,再次禁用文本编辑视图。完成子类中的所有操作。
  • 正确设置文本编辑视图的样式,以便用户产生可编辑的印象

答案 1 :(得分:0)

如果您希望自动焦点更改跳过某些视图,则可以使用nextFocus*属性的组合。

类似的东西:

<EditText
    android:id="@+id/txt1"
    android:imeOptions="actionNext"
    android:nextFocusForward="@+id/txt3"
    android:nextFocusDown="@+id/txt3"
    ... />

<!-- skipped view -->
<EditText
    android:id="@+id/txt2"
    android:imeOptions="actionNext"
    ... />

<EditText
    android:id="@+id/txt3"
    android:imeOptions="actionNext"
    android:nextFocusUp="@id/txt1"
    ... />

nextFocusForward用于actionNext。我相信其他属性在非触摸模式下非常有用(例如使用硬件键盘)