添加片段的不同方式

时间:2015-07-04 13:29:41

标签: android android-fragments

这两种添加片段的方式有什么不同:

1

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" 
        android:layout_height="match_parent">

       <fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    </FrameLayout>
</LinearLayout>

2

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>

我知道基于this article的FrameLayout是:

  

旨在屏蔽屏幕上的某个区域以显示单个项目

所以我想知道它们的输出外观有什么不同???

2 个答案:

答案 0 :(得分:1)

基本没有区别,您只需在视图中添加抽象级别即可。

输出将完全相同,但是使用第一个解决方案,您将能够在片段上添加一些重叠视图(因为FrameLayout基本上是一堆视图(您的引用关于FrameLayout不完全是btw,你可以在这个布局中添加很多元素))。

在第二个选项中,您只能在片段之前或之后添加一些视图(水平或垂直取决于您使用的LinearLayout的方向)

FrameLayout非常酷,可以制作重叠的观点,甚至可以写在你的文章中(我是这种方法的忠实粉丝):

  

但是,您可以将多个子项添加到FrameLayout和控件中   它们在FrameLayout中的位置,通过为每个分配重力   child,使用android:layout_gravity属性。

答案 1 :(得分:1)

尽管FrameLayout是多余的,但你们两种方式都是一样的。

FrameLayout正如您所说,旨在阻止屏幕上的某个区域显示单个项目。因此,它通常以这种方式使用:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id = "@+id/fragmentContainer"
        android:layout_width="match_parent" 
        android:layout_height="match_parent" />

</LinearLayout>  

以便稍后在运行时,您可以将其替换为您选择的片段,如下例所示:

MyFragment myFragment = MyFragment.newInstance();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragmentContainer, myFragment ); 
ft.commit();