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

简介

碎片是一种可以镶嵌在活动中的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宽度可自定)其余和最小限定符的使用方法完全相同,

碎片的最佳实践

简易的新闻应用

猜你喜欢

转载自blog.csdn.net/haazzz/article/details/108553903