android linearLayout 和 RelativeLayout使用的注意事项

时间:2022-11-21 17:24:09

  近期在项目中遇到了一个小问题,这个问题之前一直都没有注意到,现在分享出来,大神看不见。

Linearlayout相较于RelativeLayout来说,实现起来思路更简单一点,要么是一个从上往下的结构,要么是从左往右的结构,直来直去的,不会有RelativeLayout那么多控件之间的关联。

但他的缺点也是显而易见的,就是有时候布局的层次会比RelativeLayout更深一些,而且代码量也会随之多一点。

废话不多说,接下来说我遇到的问题。

这是我遇到问题的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    >

    <FrameLayout
        android:id="@+id/fl_main_tab_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/line_main_tab"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" >
    </FrameLayout>

    <View
        android:id="@+id/line_main_tab"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_above="@+id/rg_main_tab"
        android:background="@android:color/darker_gray" />

    <RadioGroup
        android:id="@+id/rg_main_tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="bottom"
        android:background="#28529C"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/rb_main_tab_1"
            style="@style/MainTabBottom"
            android:checked="true"
            android:drawableTop="@drawable/selector_main_tab_1"
            android:text="@string/tab01"
            android:textSize="14sp"
            android:background="@android:color/transparent"
            android:textColor="@drawable/selector_text_color_main_tab" />

        <RadioButton
            android:id="@+id/rb_main_tab_2"
            style="@style/MainTabBottom"
            android:drawableTop="@drawable/selector_main_tab_2"
            android:text="@string/tab02"
            android:textSize="14sp"
            android:background="@android:color/transparent"
            android:textColor="@drawable/selector_text_color_main_tab" />

        <RadioButton
            android:id="@+id/rb_main_tab_3"
            style="@style/MainTabBottom"
            android:drawableTop="@drawable/selector_main_tab_3"
            android:text="@string/tab03"
            android:textSize="14sp"
            android:background="@android:color/transparent"
            android:textColor="@drawable/selector_text_color_main_tab" />

        <RadioButton
            android:id="@+id/rb_main_tab_4"
            style="@style/MainTabBottom"
            android:drawableTop="@drawable/selector_main_tab_4"
            android:text="@string/tab04"
            android:visibility="visible"
            android:textSize="14sp"
            android:background="@android:color/transparent"
            android:textColor="@drawable/selector_text_color_main_tab" />
        <RadioButton
            android:id="@+id/rb_main_tab_5"
            style="@style/MainTabBottom"
            android:drawableTop="@drawable/selector_main_tab_5"
            android:text="@string/tab05"
            android:textSize="14sp"
            android:visibility="visible"
            android:background="@android:color/transparent"
            android:textColor="@drawable/selector_text_color_main_tab" />
    </RadioGroup>

</RelativeLayout>

相信大家看一下就知道这个布局是做什么用的,一个fragment容器+底部导航栏。我在项目的结构是一个activity加几个fragment,项目中有个需求需要跳转到其中一个fragment上,并且隐藏掉底部导航栏也就是radiogroup。

我一开始的想法就是用findviewbyid(R.id.rg_main_tab).setVisibility(View.GONE);这样写的结果就是不仅把radiogroup隐藏了,而且,fragment也不显示了。当时感觉很不可思议,可是挡我打开布局文件以后,我发现了问题所在。

仔细看下上面的布局,可以发现整个页面布局其实是以radiogroup为基准的,view处于radiogroup之上,而fragment容器处于view之上,所以才会出现radiogroup不见以后整个页面都不显示的情况。

以下这是我修改以后的布局,当然继续用RelativeLayout也可以解决问题,只要布局不以radiogroup为基准即可。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/fl_main_tab_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </FrameLayout>

    <View
        android:id="@+id/line_main_tab"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="@android:color/darker_gray" />

    <RadioGroup
        android:id="@+id/rg_main_tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="#28529C"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/rb_main_tab_1"
            style="@style/MainTabBottom"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/selector_main_tab_1"
            android:text="@string/tab01"
            android:textColor="@drawable/selector_text_color_main_tab"
            android:textSize="14sp" />

        <RadioButton
            android:id="@+id/rb_main_tab_2"
            style="@style/MainTabBottom"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/selector_main_tab_2"
            android:text="@string/tab02"
            android:textColor="@drawable/selector_text_color_main_tab"
            android:textSize="14sp" />

        <RadioButton
            android:id="@+id/rb_main_tab_3"
            style="@style/MainTabBottom"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/selector_main_tab_3"
            android:text="@string/tab03"
            android:textColor="@drawable/selector_text_color_main_tab"
            android:textSize="14sp" />

        <RadioButton
            android:id="@+id/rb_main_tab_4"
            style="@style/MainTabBottom"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/selector_main_tab_4"
            android:text="@string/tab04"
            android:textColor="@drawable/selector_text_color_main_tab"
            android:textSize="14sp"
            android:visibility="visible" />

        <RadioButton
            android:id="@+id/rb_main_tab_5"
            style="@style/MainTabBottom"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/selector_main_tab_5"
            android:text="@string/tab05"
            android:textColor="@drawable/selector_text_color_main_tab"
            android:textSize="14sp"
            android:visibility="visible" />
    </RadioGroup>

</LinearLayout>


第一次写博客,记录一下工作中遇到的问题,虽然这是个很简单的问题,但还是希望可以帮到其他androider,之前在项目中也遇到和解决了很多问题,但是都没有整理出来,以后争取把自己所学的东西都整理出来和大家分享,mark。