Android(安卓)单帧片段
单帧片段(Single Frame Fragment)
实例
这个例子将解释如何创建自己的 片段。在这里,我们将创建两个片段,其中一个将在设备处于横向模式时使用,另一个片段将在纵向模式下使用。因此,让我们按照以下步骤来创建 Hello World 实例:
| 步骤 | 描述 |
|---|---|
| 1 | 您将使用 Android Studio 创建一个 Android 应用程序,并将其命名为 HelloWorld,位于 com.cankaoshouce.helloworld 包下,activity 为空。 |
| 2 | 修改主 Activity 文件 MainActivity.java,如下代码所示。在这里,我们将检查设备的方向,并因此在不同的片段之间进行切换。 |
| 3 | 在包 com.cankaoshouce.helloworld 下创建两个 Java 文件 PM_Fragment.java 和 LM_Fragement.java,以定义您的片段和相关方法。 |
| 4 | 创建布局文件 res/layout/lm_fragment.xml 和 res/layout/pm_fragment.xml 并为两个片段定义布局。 |
| 5 | 修改 res/layout/activity_main.xml 文件的默认内容以包括两个片段。 |
| 6 | 在 res/values/strings.xml 文件中定义所需的常量 |
| 7 | 运行该应用程序以启动 Android 模拟器并验证在该应用程序中所做更改的结果。 |
以下是修改后的主要 Activity 文件 MainActivity.java 的代码内容:
package com.cankaoshouce.helloworld;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.content.res.Configuration;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {/** 在Activity首次创建时调用。 */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Configuration config = getResources().getConfiguration();FragmentManager fragmentManager = getFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();/*** 检查设备的方向并采取相应的行动*/if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {/*** 设备的横屏模式*/LM_Fragement ls_fragment = new LM_Fragement();fragmentTransaction.replace(android.R.id.content, ls_fragment);}else{/*** 设备竖屏模式*/PM_Fragement pm_fragment = new PM_Fragement();fragmentTransaction.replace(android.R.id.content, pm_fragment);}fragmentTransaction.commit();}}
创建两个片段文件 LM_Fragement.java 和 PM_Fragment.java
以下是 LM_Fragement.java 文件的内容:
package com.cankaoshouce.helloworld;import android.os.Bundle;import android.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/*** A simple {@link Fragment} subclass.* Use the {@link LM_Fragement#newInstance} factory method to* create an instance of this fragment.*/public class LM_Fragement extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {/*** 膨胀这个片段的布局*/return inflater.inflate(R.layout.lm_fragement, container, false);}}
以下是 PM_Fragement.java 文件的内容:
package com.cankaoshouce.helloworld;import android.os.Bundle;import android.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/*** A simple {@link Fragment} subclass.* Use the {@link PM_Fragement#newInstance} factory method to* create an instance of this fragment.*/public class PM_Fragement extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {/*** 膨胀这个片段的布局*/return inflater.inflate(R.layout.pm_fragment, container, false);}}
在 res/layout 目录下创建两个布局文件 lm_fragement.xml 和 pm_fragment.xml。
以下是 lm_fragement.xml 文件的内容:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".LM_Fragement"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/landscape_message"android:textColor="#000000"android:textSize="100px" /><!-- 这里可以配置更多图形组件 --></LinearLayout>
以下是 pm_fragment.xml 文件的内容:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".PM_Fragement"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/portrait_message"android:textColor="#000000"android:textSize="100px" /><!-- 这里可以配置更多图形组件 --></LinearLayout>
以下是 res/layout/activity_main.xml 文件的内容:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context=".MainActivity"><fragmentandroid:name="com.example.fragments"android:id="@+id/lm_fragment"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent" /><fragmentandroid:name="com.example.fragments"android:id="@+id/pm_fragment"android:layout_weight="2"android:layout_width="0dp"android:layout_height="match_parent" /></RelativeLayout>
确保您具有以下 res/values/strings.xml 文件的内容:
<resources><string name="app_name">HelloWorld</string><!-- TODO: Remove or change this placeholder text --><string name="landscape_message">这是横屏模式片段</string><string name="portrait_message">这是竖屏模式片段</string></resources>
让我们尝试运行刚刚创建的修改后的 HelloWorld 应用程序。我假设您是在进行环境设置时创建的 AVD。要从 Android Studio 运行该应用,请打开您项目的 Activity 文件之一,然后从工具栏中单击
图标。Android Studio 将应用程序安装在您的 AVD 上并启动它,如果设置和应用程序一切正常,它将显示 "模拟器" 窗口。请耐心等待,因为这可能需要花费一些时间,具体取决于您的计算机速度,出现以下内容:

要更改模拟器屏幕的模式,让我们执行以下操作:
- 在 Mac 上,fn+control+F11 将横向更改为纵向,反之亦然。
- 在 Windows 上使用 ctrl+F11。
- 在 Linux 上使用 ctrl+F11。
更改模式后,您将能够看到您为横向模式实现的 GUI,如下所示:

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