如何使所有EditText不可编辑(反之亦然)?

时间:2018-08-12 09:57:22

标签: android

我有一个应用,其中有多个文本字段。我希望能够在编辑它们和不编辑它们之间切换。如何在不对每个EditText中的每个人的ID进行硬编码的情况下完成此操作?

例如,我想要替代

EditText Et = findViewById((R.id.one));
Et.setFocusable(false);
Et.setClickable(false);
Et = findViewById((R.id.two));
Et.setFocusable(false);
Et.setClickable(false);
//...continue the pattern
Et = findViewById((R.id.ten));

2 个答案:

答案 0 :(得分:1)

将它们放入数组中:

EditText[] etArray = { findViewById(R.id.one), findViewById(R.id.two), findViewById(R.id.three) };

for (EditText et : etArray) {
    et.setFocusable(false);
    et.setClickable(false);
}

或如果名称类似于10个视图的EditText1,EditText2 ...

    for (int i = 1; i <= 10; i++) {
        int id = getResources().getIdentifier("EditText" + i, "id", getPackageName());
        EditText et = findViewById(id);
        et.setFocusable(false);
        et.setClickable(false);
    }

甚至更好的是,在onCreate()中创建一个ArrayList并使用该列表:
该声明在您的活动中具有全球性

ArrayList<EditText> etArrayList;

这是用于onCreate():

etArrayList = new  ArrayList<EditText>();
for (int i = 1; i <= 10; i++) {
    int id = getResources().getIdentifier("EditText" + i, "id", getPackageName());
    EditText et = findViewById(id);
    etArrayList.add(et);
}

并在您的活动班级中的任何地方使用它:

for (EditText et : etArrayList) {
    et.setFocusable(false);
    et.setClickable(false);
}

答案 1 :(得分:0)

是的,可以在不进行硬编码的情况下修改您的EditText。假设它们包含在名为LinearLayout的{​​{1}}中,那么您可以按照以下方式遍历它们:

main_content