使所有EditText不能一起编辑

时间:2017-04-26 09:26:53

标签: android android-edittext

我搜索并找到了使单个EditText无法编辑的方法,例如

  1. edittext.setKeyListener(null);
  2. EditText设为android:focusable="false"
  3. 但是,这些方法的问题在于我需要引用布局中的每个EditText视图,并单独实现上述语句。有没有办法让布局中的所有EditText视图都不可编辑?

    应用程序是这样的:我有一个“显示和编辑”活动,其中向用户显示数据库中的当前记录。此时,显示的文本应该是只读的。如果需要,他单击编辑按钮,然后EditText视图变为可编辑。

    我尝试在根android:inputType="none"中设置android:focusable="false"ViewGroup,但这不起作用。有出路吗?

2 个答案:

答案 0 :(得分:4)

如果您想以编程方式实现此目的,

public void setupUI(View view, boolean editable) {
    if (view instanceof EditText) {
        ((EditText)view).setFocusable(editable);
        //Here you can add any other code that needed to be done while changing focus of a particular edit text
        return;
    }
    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            View innerView = ((ViewGroup) view).getChildAt(i);
            setupUI(innerView, editable);
        }
    }
}

使用您的片段或活动的父视图提供此方法。

当您单击编辑按钮时,将父视图传递给方法,并且在编辑后传递父视图并且为真(即,不可编辑)后为真(即可编辑)。

答案 1 :(得分:1)

来自android:descendantFocusability docs

  

在查找要获得焦点的视图时定义ViewGroup及其后代之间的关系。

将此应用于EditText的父级:

android:descendantFocusability="blocksDescendants"

这将导致ViewGroup阻止其后代获得焦点。