这两种添加片段的方式有什么不同:
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是:
旨在屏蔽屏幕上的某个区域以显示单个项目
所以我想知道它们的输出外观有什么不同???
答案 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();