Disable all edittext inside linear layout

Viewed 1972

I am trying to disable all field inside linear layout. There are many edittext and textview inside that linear layout. However, i am only trying to disable edittext. I was able to disable all children but i want able to disable on edit text. Is there any way to do that?

4 Answers

The recursivity is the easiest way to do that. More secure to catch them all.

private void setAllEditTextEnabled(@NonNull View view, boolean enable){
    if (view instanceof EditText) {
        view.setEnabled(enable);
    }
    else if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            View innerView = ((ViewGroup) view).getChildAt(i);
            setAllEditTextEnabled(innerView, enable);
        }
    }
}

The accepted answer allows only to disable the EditText. The same solution cannot be used to enable it because all EditTexts are not touchables anymore.

The below solution is just an improvement on previously produced solutions.

       fun setAllEditTextEnabled(view: View, enable: Boolean){
            if (view is EditText) {
                view.setEnabled(enable)
            }
            else if (view is ViewGroup) {
                for (i in 0 until view.childCount) {
                    val innerView = view.getChildAt(i)
                    setAllEditTextEnabled(innerView, enable)
                }
            }
        }
Related