Подтвердить что ты не робот

Как отключить/включить всех детей в LinearLayout на Android

Есть ли способ, программируя, что все дети определенного макета?

Например, у меня этот макет с двумя детьми:

<LinearLayout android:layout_height="wrap_content"
        android:id="@+id/linearLayout1" android:layout_width="fill_parent">
        <SeekBar android:layout_height="wrap_content" android:id="@+id/seekBar1"
            android:layout_weight="1" android:layout_width="fill_parent"></SeekBar>
        <TextView android:id="@+id/textView2" android:text="TextView"
            android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"
            android:layout_height="wrap_content"></TextView>
    </LinearLayout>

и я хочу сделать что-то вроде:

LinearLayout myLayout = (LinearLayout) findViewById(R.id.linearLayout1);
myLayout.setEnabled(false);

Чтобы отключить два текстовых изображения.

Любая идея как?

4b9b3361

Ответ 1

LinearLayout расширяет ViewGroup, поэтому вы можете использовать методы getChildCount() и getChildAt (index) для итерации через ваши дети LinearLayout и делать все, что хотите с ними. Я не уверен, что вы подразумеваете под включением/отключением, но если вы просто пытаетесь скрыть их, вы можете сделать setVisibility (View.GONE);

Итак, это выглядит примерно так:

LinearLayout myLayout = (LinearLayout) findViewById(R.id.linearLayout1);
for ( int i = 0; i < myLayout.getChildCount();  i++ ){
    View view = myLayout.getChildAt(i);
    view.setVisibility(View.GONE); // Or whatever you want to do with the view.
}

Ответ 2

Вы также можете отключить/включить, не используя setVisibility()

Добавьте View.OnClickListener в свой CheckBox, затем передайте View, который хотите отключить, в следующую функцию...

private void enableDisableView(View view, boolean enabled) {
    view.setEnabled(enabled);

    if ( view instanceof ViewGroup ) {
        ViewGroup group = (ViewGroup)view;

        for ( int idx = 0 ; idx < group.getChildCount() ; idx++ ) {
            enableDisableView(group.getChildAt(idx), enabled);
        }
    }
}

со следующей ссылкой Есть ли способ отключить все элементы в определенном макете программно?

Ответ 3

Почему бы просто не сделать setVisibility (View.GONE) на самом макете, а не итерировать через своих детей?

Ответ 4

Просто добавьте еще один прозрачный макет, который будет соответствовать_parent исходного вида и изменит его видимость на видимый, когда вы хотите отключить всех детей и включить детей, а затем просто измените видимость на

Ответ 5

Возможно, поздно, но вы можете просто добавить android:duplicateParentState="true" в дочернем LinearLayout

Что-то вроде этого:

 <LinearLayout
     android:id="@+id/container"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">

     <TextView
         android:id="@+id/textA"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:duplicateParentState="true"
         android:text="First Text"/>

     <TextView
         android:id="@+id/textB"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:duplicateParentState="true"
         android:text="Second Text"/>

 </LinearLayout>