2017-04-26 62 views
1

我搜索,找到方法,使一个单一的EditText不可编辑,如使所有的EditText不可编辑一起

  1. edittext.setKeyListener(null);
  2. 设置EditTextandroid:focusable="false"

然而,问题与这些方法是我需要在我的布局中获得对每个EditText视图的引用,并单独实现上述语句。有没有办法让布局中的所有EditText视图不可编辑?

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

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

回答

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); 
     } 
    } 
} 

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

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

+0

Thanx的小问题,但最后一次调用setupUI还将包括布尔参数可编辑的权利? –

+0

我删除了函数声明中的布尔可编辑参数,它工作正常。感谢名单。点击时,视图点亮。我想我可以包含一个命令来使视图不可点击。 –

+0

对,对不起。我已经更新了我的答案。 –

1

android:descendantFocusability docs

看时的视图采取集中定义的ViewGroup及其后代之间的关系。

应用此那些EditText S的父:

android:descendantFocusability="blocksDescendants" 

这将导致所述ViewGroup从接收焦点阻止其后代。

+0

This Works,thanx!尽管点击时,EditText视图仍然亮起。如果有某种方式禁用可点击的话,会很好。找不到类似的属性。 –

+0

将'android:focusable =“false”'应用于'EditText'。 – azizbekian

+0

但我必须分别对每个EditText做这件事,这是整个问题。 –