android 碎片用法,Android Fragment碎片使用

Fragment碎片是可嵌入到活动中的UI片段,能让程序更加合理利用大屏幕。

Fragment基本用法

在一个活动中添加2个Fragment,这两个Fragment平方活动空间。

1、创建左侧的Fragment布局left_fragment.xml<?xml version="1.0" encoding="utf-8"?>

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:text="Button"/>

创建右侧的Fragment布局right_fragment.xml<?xml version="1.0" encoding="utf-8"?>

android:orientation="vertical"

android:background="#00ff00"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:textSize="20sp"

android:text="This is right fragment."/>

2、创建Fragment类

左侧Fragment类LeftFragment:public class LeftFragment extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.left_fragment, container, false);

return view;

}

}

右侧Fragment类RightFragment:public class RightFragment extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.right_fragment, container, false);

return view;

}

}

3、在活动布局中添加Fragment<?xml version="1.0" encoding="utf-8"?>

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/left_fragment"

android:name="com.jyoryo.app.android.study.LeftFragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"/>

android:id="@+id/right_fragment"

android:name="com.jyoryo.app.android.study.RightFragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"/>

动态添加Fragment

动态添加Fragment分为以下几个步骤:创建待添加的Fragment;

获取FragmentManager;

开启事务fragmentManager.beginTransaction();

向容器添加或替换Fragment,一般使用transaction.replace(R.id.right_layout, fragment);

提交事务transaction.commit()。@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button = (Button)findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

replaceFragment(new AnotherRightFragment());

}

});

replaceFragment(new RightFragment());

}

private void replaceFragment(Fragment fragment) {

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction transaction = fragmentManager.beginTransaction();

transaction.replace(R.id.right_layout, fragment);

transaction.commit();

}

Fragment返回栈

在事务调用提交前调用addToBackStack方法,可以将一个事务添加至当前返回栈中。FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction transaction = fragmentManager.beginTransaction();

transaction.replace(R.id.right_layout, fragment);

transaction.addToBackStack(null);

transaction.commit();

Fragment和Activity通信

在Activity中获取Fragment:LeftFragment leftFragment = (LeftFragment)getSupportFragmentManager().findFragmentById(R.id.left_fragment);

在Fragment中获取Activity:MainActivity activity = (MainActivity)getActivity();

Fragment生命周期

Fragment生命周期:onAttach():当Fragment和活动建立关联的时候调用,被附加到Activity中去;

onCreate():在创建Fragment时调用此方法。可以初始化一段资源等;

onCreateView():为Fragment创建视图(加载布局)时调用;

onActivityCreated():确保与Fragment相关联的Activity一定已经创建完毕时调用;

onStart():当Fragment由不可见变为可见的时候调用;

onResume():Fragment的Activity位于返回栈的栈顶,并且处于运行状态;

onPause():当Fragment被添加到返回栈后,被移除或替换时调用;

onStop():类似Activity的onStop();

onDestroyView():当Fragment和Activity关联的视图被移除时调用;

onDestroy():

onDetach():当Fragment和Activity解除关联的时候调用。

使用Fragment布局技巧

Android应用也可以在平板上运行,为了充分利用大屏幕,可以采用左右分屏模式(双页模式),但手机上的屏幕一次只能显示其中一页的内容,在手机上需要用两个页面分开进行显示。

但是如何在运行时确定是使用双页模式还是单页模式?可以借助限定符来实现。

在默认的布局文件夹layout下活动的布局activiy_main.xml:<?xml version="1.0" encoding="utf-8"?>

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/left_fragment"

android:name="com.jyoryo.app.android.study.s0301.LeftFragment"

android:layout_width="match_parent"

android:layout_height="match_parent" />

在res目录下新建文件夹layout-large,创建活动的布局activiy_main.xml:<?xml version="1.0" encoding="utf-8"?>

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/left_fragment"

android:name="com.jyoryo.app.android.study.s0301.LeftFragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"/>

android:id="@+id/right_fragment"

android:name="com.jyoryo.app.android.study.s0301.RightFragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1" />

上面2个布局就能实现默认屏幕大小应用使用单页模式,大屏幕使用双页模式。

Android中常见限定符

按屏幕大小划分:限定符说明small提供给小屏幕设备的资源

normal提供给中等屏幕设备的资源

large提供给大屏幕设备的资源

xlarge提供给超大屏幕设备的资源

按屏幕分辨率划分:限定符说明ldpi提供给低分辨率设备的资源(120dpi以下)

mdpi提供给中等分辨率设备的资源(120dpi~160dpi)

hdpi提供给高分辨率设备的资源(160dpi~240dpi)

xhdpi提供给超高分辨率设备的资源(240dpi~320dpi)

xxhdpi提供给超超高分辨率设备的资源(320dpi~480dpi)

按屏幕方向划分:限定符说明land提供给横屏设备的分辨率

port提供给竖屏设备的分辨率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fragment表现Activity中用户界面的一个行为或者是一部分。你可以在一个单独的activity上把多个fragment组合成为一个多区域的UI,并且可以在多个activity中再使用。你可以认为fragment是activity的一个模块零件,它有自己的生命周期,接收它自己的输入事件,并且可以在activity运行时添加或者删除。 Fragment必须总是被嵌入到一个activity之中,并且fragment的生命周期直接受其宿主activity的生命周期的影响。例如,一旦activity被暂停,它里面所有的fragment也被暂停,一旦activity被销毁,它里面所有的fragment也被销毁。然而,当activity正在运行时(处于resumed的生命周期状态),你可以单独的操控每个fragment,比如添加或者删除。当你执行这样一项事务时,可以将它添加到后台的一个栈中,这个栈由activity管理着——activity里面的每个后台栈内容实体是fragment发生过的一条事务记录。这个后台栈允许用户通过按BACK键回退一项fragment事务(往后导航)。 当你添加一个fragment作为某个activity布局的一部分时,它就存在于这个activity视图体系内部的ViewGroup之中,并且定义了它自己的视图布局。你可以通过在activity布局文件中声明fragment,用<fragment>元素把fragment插入到activity的布局中,或者是用应用程序源码将它添加到一个存在的ViewGroup中。然而,fragment并不是一个定要作为activity布局的一部分;fragment也可以为activity隐身工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值