我搜索并找到了使单个EditText无法编辑的方法,例如
edittext.setKeyListener(null);
EditText
设为android:focusable="false"
但是,这些方法的问题在于我需要引用布局中的每个EditText
视图,并单独实现上述语句。有没有办法让布局中的所有EditText视图都不可编辑?
应用程序是这样的:我有一个“显示和编辑”活动,其中向用户显示数据库中的当前记录。此时,显示的文本应该是只读的。如果需要,他单击编辑按钮,然后EditText视图变为可编辑。
我尝试在根android:inputType="none"
中设置android:focusable="false"
和ViewGroup
,但这不起作用。有出路吗?
答案 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
阻止其后代获得焦点。