碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕空间,而在平板上应用的非常广泛,下面就用代码的方式来讲解一下碎片的基础用法。
一、碎片的简单用法
这里我们假设将活动平分为两个部分,左右各有一个碎片,新建一个左侧的碎片布局left_fragment.xml,代码如下所示:
<!—放置一个按钮,水平居中—> <Button android:id="@+id/left_btn01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Button" android:textAllCaps="false" />
新建右侧的碎片布局right_fragment.xml,代码如下所示:
<TextView android:id="@+id/right_textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="20sp" android:text="this is right fragement" />
接着创建一个LeftFragent类,继承自Fragment
public class LeftFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.left_fragement, container, false); return view; } }
创建一个RightFragment类,继承自Fragment
public class RightFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.right_fragement, container,false); return view; } }
然后在活动FirstActivity对应的XML文件中添加布局
1 <fragment 2 android:id = "@+id/left_fragment" 3 android:layout_width="0dp" 4 android:layout_height="match_parent" 5 android:name="com.example.whs.fragementproject.LeftFragment" 6 android:layout_weight="1" 7 > 8 </fragment> 9 10 <fragment 11 android:id = "@+id/right_fragment" 12 android:layout_width="0dp" 13 android:layout_height="match_parent" 14 android:name="com.example.whs.fragementproject.RightFragment" 15 android:layout_weight="1" 16 > 17 </fragment>
至此,一个简单的碎片实例就已经写好了。当然,这非常简单,接下来我们会在上面代码的基础上来详细讲解一些其它有关碎片的知识。
二、动态添加碎片
新建XML文件another_right_fragment.xml
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="20sp" android:text="this is another right fragment" />
创建一个AnotherRightFragment类,继承自Fragment
public class AnotherRightFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.another_right_fragment, container, false); return view; } }
然后在活动FirstActivity对应的XML文件
1 <fragment 2 android:id = "@+id/left_fragment" 3 android:layout_width="0dp" 4 android:layout_height="match_parent" 5 android:name="com.example.whs.fragementproject.LeftFragment" 6 android:layout_weight="1" 7 > 8 </fragment> 9 10 11 <FrameLayout 12 android:id="@+id/right_layout" 13 android:layout_width="0dp" 14 android:layout_height="match_parent" 15 android:layout_weight="1" 16 > 17 </FrameLayout>
然后在活动FirstActivity类中添加按钮点击事件,动态添加碎片
public void leftAction(View view){ AnotherRightFragment fragment = new AnotherRightFragment(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.right_layout, fragment); transaction.commit(); }
1,创建待添加的碎片实例
2,获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到。
3,开启一个事务,通过调用beginTransaction()方法开启。
4,向容器内加入碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。
5,提交事务,调用commit()方法来完成。