Android中的自动片段选择

时间:2014-06-18 12:21:39

标签: android fragment

我刚刚开始学习片段,并且已经完成了几个教程。我注意到你可以用另一个片段替换现有片段,或者引用现有片段并更改它上面的UI内容。我假设有添加和删除片段的方法。

但是在我开始学习片段之前,我假设Android有一些内置的片段选择机制。如果我的应用程序在智能手机上运行,​​它可能会为主屏幕选择一个片段,并且通过滑动,将显示第二个片段。这将提供一种主/细节视图。然后,如果您在平板电脑上运行相同的应用程序,则两个片段将同时显示。

但显然我一定是错的。 Android可能没有内置足够复杂的逻辑来确定屏幕大小并以某种优化方式自动排列片段。这是吗?或者我想检测屏幕大小,并在代码中安排我的片段,以优化屏幕使用?有很多不同的屏幕尺寸,我怀疑我最终编写了大量代码来确定每个尺寸的布局并相应地排列碎片。

2 个答案:

答案 0 :(得分:1)

好的,这就是它的工作原理

您在活动的布局文件中有一个Container,每次添加/替换片段时,都会将其添加到该容器中。

现在,如果您想在平板电脑上并排显示两个不同的片段。您只需创建一个包含两个容器的单独XML,您就可以非常轻松地使用java来处理它。

此处更多参考Android Fragments

答案 1 :(得分:1)

您可以根据屏幕大小定义不同的布局,然后控制源代码中片段之间的交互。因此,在主/细节的情况下,您将拥有一个处理表格的布局和另一个处理电话的布局。 Android会根据其大小自动选择当前设备的布局文件。要查看示例,请在Eclipse中启动一个新项目,选择master / detail,它将完全按照描述创建一个简单的项目。

以下摘自http://developer.android.com/guide/practices/tablets-and-handsets.html

根据屏幕大小,系统会应用不同的main.xml布局文件:

手机的res / layout / main.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">
    <!-- "Fragment A" -->
    <fragment class="com.example.android.TitlesFragment"
              android:id="@+id/list_frag"
              android:layout_width="match_parent"
              android:layout_height="match_parent"/> </FrameLayout>
平板电脑的res / layout-large / main.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="horizontal"   android:layout_width="match_parent" android:layout_height="match_parent"   android:id="@+id/frags">
    <!-- "Fragment A" -->   <fragment class="com.example.android.TitlesFragment"
            android:id="@+id/list_frag"
            android:layout_width="@dimen/titles_size"
            android:layout_height="match_parent"/>
    <!-- "Fragment B" -->   <fragment class="com.example.android.DetailsFragment"
            android:id="@+id/details_frag"
            android:layout_width="match_parent"
            android:layout_height="match_parent" /> </LinearLayout>