2017-04-18 52 views
0

我有LinearLayout里面的DrawerLayout根据layout_weight呈现抽屉项目和视图。我试图通过设置其高度为0或以View.Visibility - GONE属性以编程方式隐藏该视图。DrawerLayout的内部视图布局总是返回FrameLayout

试过

  • 通过设定其公开程度为GONE它充当INVISIBLE

  • 通过获得其的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> 

布局: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 getLayoutPa rams它返回FrameLayout其中它的父视图是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 

谁能开导我,为什么它返回,而不是 的LinearLayout或者的FrameLayout为什么它的可见性变为不可见,而不是走了吗?

回答

0

尽管更改视图 - 可见性为GONEINVISIBLE仍然视图始终是隐形的。它确实接受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(); 

仍然我不明白为什么内部ViewView布局里面的DrawerLayout总是返回FrameLayout。