本文共 3037 字,大约阅读时间需要 10 分钟。
Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
Android是在Android 3.0 (API level 11)开始引入Fragment的。
不扯淡了,直接上例子,这才有感性认识。
<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" > <fragment android:id="@+id/id_fragment_title" android:name="com.zhy.zhy_fragments.TitleFragment" android:layout_width="fill_parent" android:layout_height="45dp" /> <fragment android:layout_below="@id/id_fragment_title" android:id="@+id/id_fragment_content" android:name="com.zhy.zhy_fragments.ContentFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
这个是主布局。。里面的两个fragment,其实就是name引用两个Fragment类的实例。。类似于:
public class TitleFragment extends Fragment{ private ImageButton mLeftMenu; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_title, container, false); mLeftMenu = (ImageButton) view.findViewById(R.id.id_title_left_btn); mLeftMenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), "i am an ImageButton in TitleFragment ! ", Toast.LENGTH_SHORT).show(); } }); return view; }}这个Fragment里面,其实也是布局了一个layout的,因为是用Fragment,这个主布局中的小布局,有了自己的布局事件,有了生命周期,等等。从这个可以看出,Fragment创建的布局就像是Activity的小弟。这个fragment,是专来布局Fragment的专用标签。两个名字只是为了好识别。谁让布局文件的默认首字母都是小写的。还有,要说的是,FrameLayout是布局标签,fragment是控件标签,这两个只是字母有点象,别的半毛钱关系没有。