Android第一行代码——第四章碎片

本文深入讲解了碎片(Fragment)在Android开发中的应用,包括创建、动态加载、与Activity通信及生命周期管理等内容,适用于平板等大屏设备的UI设计优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

碎片是一种可以镶嵌在活动中的UI片段,能让程序更加合理的利用大屏幕的空间,在平板中应用广泛。

碎片的简单使用

1.创建碎片的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/left_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="button"/>

</LinearLayout>
2.创建Fragment的子类
这里要重写onCreateView()方法,在方法中把刚才的xml文件动态添加进来
package com.example.revise_4;
public class LeftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fiagment,container,false);
        return view;
    }
}

3.在活动中引入碎片
这里通过fragment标签引入
注意:在fragment标签内一定要设定id,负责出错
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <fragment
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/left_fragment"
        android:name="com.example.revise_4.LeftFragment"
        />
</LinearLayout>

动态添加碎片

1.创建待添加碎片的实例
2.获取FragmentManager(getSupportFragmentManager)
3. 开启一个事务(beginTransaction)
4.向容器内添加或替换碎片
5.提交事务(commit() )
LeftFragment leftFragment = new LeftFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_layout,leftFragment);
//transaction.addToBackStack(null);           //可以将事务添加到返回栈
transaction.commit();

碎片与活动之间的通信

-在活动中调用碎片里的方法

LeftFragment fragment = (LeftFragment)getSupportFragmentManager().findFragmentById(R.id.left_fragment);

-在碎片中调用活动里的方法

在每个碎片中都可通过getActivity()来得到和当前活动关联的活动实例
MainActivity mainActivity = (MainActivity)getActivity();        //在碎片中获取活动的实例

碎片的生命周期

1. onAttach() 碎片和活动建立关联时调用
2. onCreate() 活动第一次被创建时调用
3. onCreateView() 为碎片加载布局时调用
4. onActivityCreated() 确保与碎片向关联的活动一定创建完毕时调用
5. onstart() 活动由不可见变为可见时调用
6. onResume() 活动准备好和用户交汇时调用
7. onPause() 系统准备去启动或恢复另一个活动时调用
8. onStop() 活动完全不可见时调用
9. onDestoyView() 与碎片关联的视图被移除时调用
10. onDestory() 活动销毁之前调用
11. onDetach() 碎片和活动解除关联时调用

动态加载布局的技巧

使用限定符

屏幕特征限定符描述
大小small提供给小屏幕设备的资源
大小normal提供给中等屏幕设备的资源
大小large提供给大屏幕设备的资源
大小xlarge提供给超大屏幕设备的资源
分辨率ldpi提供给低分辨率设备的资源(120dpi以下)
分辨率mdpi提供给中等分辨率设备的资源(120dpi到160dpi)
分辨率hdpi提供给高分辨率设备的资源(160dpi到240dpi)
分辨率xhdpi提供给超高分辨率设备的资源(240dpi到320dpi)
方向land提供给横屏设备的资源
方向port提供给竖屏设备的资源
使用说明:如使用large,在res目录下新建layout-large目录,在这里建一个和原xml文件同名的文件,那么当运行程序时,手机将显示原layout的布局,平板显示layout-large下的布局
layout/activity.main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <fragment
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/left_fragment"
        android:name="com.example.revise_4.LeftFragment"
        />
</LinearLayout>
layout-large/activity.main
<?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">
    <fragment
        android:layout_width="0dp"
        android:layout_weight="1"
        android:id="@+id/left_fragment"
        android:layout_height="match_parent"
        android:name="com.example.revise_4.LeftFragment"/>
    <fragment
        android:layout_width="0dp"
        android:id="@+id/right_fragment"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:name="com.example.revise_4.RightFragment"/>

</LinearLayout>

在这里插入图片描述

使用最小宽度限定符

最小宽度限定符允许我们对屏幕的宽度指定一个最小值,以此为界限,宽度小于的设备就加载一个布局,大于的就加载另一个布局
在res目录下新建layout-sw600dp文件夹(600dp宽度可自定)其余和最小限定符的使用方法完全相同,

碎片的最佳实践

简易的新闻应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值