Android(安卓)单帧片段

单帧片段(Single Frame Fragment)

单帧片段是为手持设备(手机)等小屏幕设备设计的,应该高于 Android 3.0 版本。

实例

这个例子将解释如何创建自己的 片段。在这里,我们将创建两个片段,其中一个将在设备处于横向模式时使用,另一个片段将在纵向模式下使用。因此,让我们按照以下步骤来创建 Hello World 实例:

步骤描述
1您将使用 Android Studio 创建一个 Android 应用程序,并将其命名为 HelloWorld,位于 com.cankaoshouce.helloworld 包下,activity 为空。
2修改主 Activity 文件 MainActivity.java,如下代码所示。在这里,我们将检查设备的方向,并因此在不同的片段之间进行切换。
3在包 com.cankaoshouce.helloworld 下创建两个 Java 文件 PM_Fragment.javaLM_Fragement.java,以定义您的片段和相关方法。
4创建布局文件 res/layout/lm_fragment.xmlres/layout/pm_fragment.xml 并为两个片段定义布局。
5修改 res/layout/activity_main.xml 文件的默认内容以包括两个片段。
6res/values/strings.xml 文件中定义所需的常量
7运行该应用程序以启动 Android 模拟器并验证在该应用程序中所做更改的结果。

以下是修改后的主要 Activity 文件 MainActivity.java 的代码内容:

  1. package com.cankaoshouce.helloworld;
  2. import android.app.FragmentManager;
  3. import android.app.FragmentTransaction;
  4. import android.content.res.Configuration;
  5. import android.os.Bundle;
  6. import androidx.appcompat.app.AppCompatActivity;
  7. public class MainActivity extends AppCompatActivity {
  8. /** 在Activity首次创建时调用。 */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. Configuration config = getResources().getConfiguration();
  13. FragmentManager fragmentManager = getFragmentManager();
  14. FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
  15. /**
  16. * 检查设备的方向并采取相应的行动
  17. */
  18. if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
  19. /**
  20. * 设备的横屏模式
  21. */
  22. LM_Fragement ls_fragment = new LM_Fragement();
  23. fragmentTransaction.replace(android.R.id.content, ls_fragment);
  24. }else{
  25. /**
  26. * 设备竖屏模式
  27. */
  28. PM_Fragement pm_fragment = new PM_Fragement();
  29. fragmentTransaction.replace(android.R.id.content, pm_fragment);
  30. }
  31. fragmentTransaction.commit();
  32. }
  33. }

创建两个片段文件 LM_Fragement.javaPM_Fragment.java

以下是 LM_Fragement.java 文件的内容:

  1. package com.cankaoshouce.helloworld;
  2. import android.os.Bundle;
  3. import android.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. /**
  8. * A simple {@link Fragment} subclass.
  9. * Use the {@link LM_Fragement#newInstance} factory method to
  10. * create an instance of this fragment.
  11. */
  12. public class LM_Fragement extends Fragment {
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  15. /**
  16. * 膨胀这个片段的布局
  17. */
  18. return inflater.inflate(R.layout.lm_fragement, container, false);
  19. }
  20. }

以下是 PM_Fragement.java 文件的内容:

  1. package com.cankaoshouce.helloworld;
  2. import android.os.Bundle;
  3. import android.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. /**
  8. * A simple {@link Fragment} subclass.
  9. * Use the {@link PM_Fragement#newInstance} factory method to
  10. * create an instance of this fragment.
  11. */
  12. public class PM_Fragement extends Fragment {
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  15. /**
  16. * 膨胀这个片段的布局
  17. */
  18. return inflater.inflate(R.layout.pm_fragment, container, false);
  19. }
  20. }

res/layout 目录下创建两个布局文件 lm_fragement.xmlpm_fragment.xml

以下是 lm_fragement.xml 文件的内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".LM_Fragement">
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/landscape_message"
  11. android:textColor="#000000"
  12. android:textSize="100px" />
  13. <!-- 这里可以配置更多图形组件 -->
  14. </LinearLayout>

以下是 pm_fragment.xml 文件的内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".PM_Fragement">
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/portrait_message"
  11. android:textColor="#000000"
  12. android:textSize="100px" />
  13. <!-- 这里可以配置更多图形组件 -->
  14. </LinearLayout>

以下是 res/layout/activity_main.xml 文件的内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. android:paddingBottom="@dimen/activity_vertical_margin"
  10. tools:context=".MainActivity">
  11. <fragment
  12. android:name="com.example.fragments"
  13. android:id="@+id/lm_fragment"
  14. android:layout_weight="1"
  15. android:layout_width="0dp"
  16. android:layout_height="match_parent" />
  17. <fragment
  18. android:name="com.example.fragments"
  19. android:id="@+id/pm_fragment"
  20. android:layout_weight="2"
  21. android:layout_width="0dp"
  22. android:layout_height="match_parent" />
  23. </RelativeLayout>

确保您具有以下 res/values/strings.xml 文件的内容:

  1. <resources>
  2. <string name="app_name">HelloWorld</string>
  3. <!-- TODO: Remove or change this placeholder text -->
  4. <string name="landscape_message">这是横屏模式片段</string>
  5. <string name="portrait_message">这是竖屏模式片段</string>
  6. </resources>

让我们尝试运行刚刚创建的修改后的 HelloWorld 应用程序。我假设您是在进行环境设置时创建的 AVD。要从 Android Studio 运行该应用,请打开您项目的 Activity 文件之一,然后从工具栏中单击 Eclipse Run Icon 图标。Android Studio 将应用程序安装在您的 AVD 上并启动它,如果设置和应用程序一切正常,它将显示 "模拟器" 窗口。请耐心等待,因为这可能需要花费一些时间,具体取决于您的计算机速度,出现以下内容:

要更改模拟器屏幕的模式,让我们执行以下操作:

  • 在 Mac 上,fn+control+F11 将横向更改为纵向,反之亦然。
  • 在 Windows 上使用 ctrl+F11
  • 在 Linux 上使用 ctrl+F11

更改模式后,您将能够看到您为横向模式实现的 GUI,如下所示:

通过这种方式,您可以通过不同的片段使用相同的活动但不同的 GUI。您可以根据需要为不同的 GUI 使用不同类型的 GUI 组件。

分类导航