【问题标题】:Dynamically displaying two fragments in an activity on a large screen在大屏幕上动态显示一个活动中的两个片段
【发布时间】:2014-07-04 08:42:15
【问题描述】:

我刚刚学习 android,我有一个应用程序,它的主要活动是在启动时使用片段管理器添加一个片段。然后程序在两个片段之间切换以执行其功能,再次使用片段管理器来替换片段。

我希望此应用在大屏幕上同时显示两个片段。我该怎么做

A) 检测到有大屏幕

B) 如果是这种情况,是否让主 Activity 将两个片段加载到单个 Activity 中?

每个片段都有布局,主 Activity 的布局只是一个空白框架布局,在 onCreate 期间用片段填充。请记住:有两个片段和一个活动。活动使用片段管理器将片段加载到其容器中。

【问题讨论】:

    标签: android android-layout android-activity android-fragments


    【解决方案1】:

    A) 要检测大屏幕,您可以使用此代码

    public static boolean isTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }
    

    如果设备在大屏幕上运行,则返回 true。 还要检查this link

    B) 通过代码添加片段,您可以在同一个活动上拥有两个片段。 在您的主布局中有 2 个布局,这将是两个片段的容器。如果屏幕尺寸适合您,然后通过代码将片段添加到每个片段中。 使用此代码。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:orientation="vertical"
        android:layout_height="fill_parent">
    
    <RelativeLayout
        android:id="@+id/FragmentContainer1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <RelativeLayout
        android:id="@+id/FragmentContainer2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
    </LinearLayout>
    

    然后添加片段。

    fragmentTransaction.add(R.id.FragmentContainer1, fragment);
    fragmentTransaction.add(R.id.FragmentContainer2, fragment);
    

    查看 this link 获取 Lars Vogel 的精彩教程。

    【讨论】:

    • 谢谢,这对我来说很有意义,并且该程序有效。当我按下返回时,我可以做些什么来保留应用程序的当前片段状态?当我按下 home 并返回应用程序时,一切都已保存,但当我按下返回并返回时,一切都被重置。再次感谢!
    • 为什么不用 FrameLayouts?但是RelativeLayouts。
    【解决方案2】:

    如何检测到有大屏?

    解决方案 -

    让应用检测是否有大屏幕。

    • 为不同的屏幕尺寸定义不同的布局文件。
    • 确保您的布局可以适当调整大小以适应屏幕
    • 根据屏幕配置提供适当的 UI 布局
    • 确保将正确的布局应用于正确的屏幕

    阅读 - Multiple Screen SupportSupport Screen training docs

    如何让主要活动将两个片段加载到单个活动中 如果是这样?

    解决方案 -

    您可以在单个活动中组合多个片段以构建多窗格 UI 并在多个活动中重用一个片段。当您在不同的布局中定义了片段容器时,这非常有用。您只需要替换为任何布局中的任何其他片段。

    当您导航到当前布局时,您可以使用该容器的 id 将其替换为您想要的片段。

    您也可以使用popBackStack() 方法返回到backStack 中的上一个片段。为此,您需要使用 addToBackStack() 在堆栈中添加该片段,然后使用 commit() 进行反映。这与当前在顶部的顺序相反。

    说明:

    • 让我们想用两个片段来处理横向和纵向 设备的模式。
    • 接下来根据片段的数量,创建将扩展的类 片段类。 Fragment 类有自己的回调 职能。您可以覆盖任何基于您的功能 要求。
    • 对应每个片段,你需要创建布局文件 在 XML 文件中。这些文件将具有已定义片段的布局。
    • 最后修改activity文件来定义替换的实际逻辑 片段根据您的要求。

    在 Activity 中创建两个片段的步骤 -

    1 您将使用 Eclipse IDE 创建一个 Android 应用程序,并将其命名为 MyFragments,位于包 com.example.myfragments 下,Activity 为空白。

    2 修改主Activity文件MainActivity.java如下代码所示。在这里,我们将检查设备的方向,并相应地在不同的片段之间切换。

    3 在 com.example.myfragments 包下创建两个 java 文件 PM_Fragment.java 和 LM_Fragement.java 来定义你的片段和相关的方法。

    4 创建布局文件res/layout/lm_fragment.xmlres/layout/pm_fragment.xml 并为这两个片段定义布局。

    5 修改res/layout/activity_main.xml文件的detault内容以包含两个片段。

    6 res/values/strings.xml文件中定义所需的常量

    7 运行应用程序以启动 Android 模拟器并验证应用程序中所做更改的结果。

    阅读 - FragmentTransactionAndroid Fragments

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多