Макет внутреннего вида внутри DrawerLayout всегда возвращает FrameLayout

У меня есть LinearLayout внутри DrawerLayout, который отображает элемент ящика и представления в соответствии с layout_weight. Я пытаюсь программно скрыть это представление, установив его высоту на 0 или с помощью свойства View.Visibility - GONE.

Пытался

  • Установив для параметра «Видимость» значение ПРОШЛО, он действует как НЕВИДИМЫЙ.

  • Получив его LayoutParams и установив его высоту на 0. Хотя он действует как INVISIBLE

ParentLayout : mother.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.widget.DrawerLayout
    android:id="@+id/activityMotherDrawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <include layout="@layout/activity_mother" />

    <include layout="@layout/motherdrawer" />

  </android.support.v4.widget.DrawerLayout>

Layout : motherdrawer.xml

<?xml version="1.0" encoding="utf-8"?>
<com.app.ui.view.ScrimInsetsFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/drawerRootLayout"
  android:layout_width="@dimen/activity_mother_drawer_width"
  android:layout_height="match_parent"
  android:layout_gravity="start"
  android:background="@color/background_application"
  android:fitsSystemWindows="false"
  android:orientation="vertical">

<RelativeLayout
    android:id="@+id/activityMotherDrawerInnerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="@dimen/activity_mother_drawer_layout_padding">

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


        <LinearLayout
            android:id="@+id/activityMotherDrawerMyAttendanceLayout"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:clickable="true"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/activityMotherDrawerMyAttendanceIv"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_weight="1.5"
                android:padding="@dimen/activity_mother_drawer_image_padding"
                android:scaleType="centerInside"
                android:src="@drawable/ic_drawer_attendance" />

            <android.support.v7.widget.AppCompatTextView
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_below="@id/activityMotherDrawerMyAttendanceIv"
                android:layout_centerHorizontal="true"
                android:layout_weight="1"
                android:gravity="top|center"
                android:text="@string/activity_mother_drawer_attendance"
                android:textColor="@color/colorGray"
                android:textSize="@dimen/activity_mother_drawer_text_size" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/activityMotherDrawerDashboardLayout"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:clickable="true"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/activityMotherDrawerDashboardIv"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_weight="1.5"
                android:padding="@dimen/activity_mother_drawer_image_padding"
                android:scaleType="centerInside"
                android:src="@drawable/ic_drawer_dashboard" />

            <android.support.v7.widget.AppCompatTextView
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_below="@id/activityMotherDrawerDashboardIv"
                android:layout_centerHorizontal="true"
                android:layout_weight="1"
                android:gravity="top|center"
                android:text="@string/activity_mother_drawer_dashboard"
                android:textColor="@color/colorGray"
                android:textSize="@dimen/activity_mother_drawer_text_size" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/activityMotherDrawerSettingsLayout"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:clickable="true"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/activityMotherDrawerSettingsIv"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_weight="1.5"
                android:padding="@dimen/activity_mother_drawer_image_padding"
                android:scaleType="centerInside"
                android:src="@drawable/ic_drawer_settings" />

            <android.support.v7.widget.AppCompatTextView
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_below="@id/activityMotherDrawerSettingsIv"
                android:layout_centerHorizontal="true"
                android:layout_weight="1"
                android:gravity="top|center"
                android:text="@string/activity_mother_drawer_setting"
                android:textColor="@color/colorGray"
                android:textSize="@dimen/activity_mother_drawer_text_size" />

        </LinearLayout>
    </LinearLayout>

   </RelativeLayout>
 </com.app.ui.view.ScrimInsetsFrameLayout>`

Всякий раз, когда я пытался получить layoutParam с помощью getLayoutParams, он возвращает FrameLayout, где его ParentView — это LinearLayout.

Использование Java:

mDashboardLayout = (LinearLayout)mDrawerInnerRootLayout.findViewById(R.id.activityMotherDrawerDashboardLayout);
LinearLayout.LayoutParams mParams = (LinearLayout.LayoutParams) mDashboardLayout.getLayoutParams();//returns FrameLayout instead where it should return LinearLayout

mDashboardLayout.setVisibility(View.GONE); //it acts as INVISIBILITY

Может ли кто-нибудь просветить меня, почему он возвращает FrameLayout вместо LinearLayout или почему его видимость меняется на INVISIBLE вместо GONE?


person Vikalp Patel    schedule 18.04.2017    source источник


Ответы (1)


Несмотря на изменение View - Visibility на GONE или INVISIBLE, View всегда остается НЕВИДИМЫМ. Он принимает событие onClick. Согласно SO, я хочу полностью удалить это представление. Я могу добиться этого, используя следующий метод.

Я программно добавляю View в иерархию ParentView и обновляю весь макет.

  View inflatedDashboardView;
  inflatedDashboardView = mInflater.inflate(R.layout.layout_drawer_dashboard, mDrawerInnerRootLayout, false);
  mDashboardLayout = (LinearLayout) inflatedDashboardView.findViewById(R.id.activityMotherDrawerDashboardLayout);
  mDrawerInnerRootLayout.addView(inflatedDashboardView);
  mDrawerInnerRootLayout.forceLayout();

Тем не менее я не могу понять, почему InnerView Layout внутри DrawerLayout всегда возвращает FrameLayout.

person Vikalp Patel    schedule 15.05.2017