框架布局是最简单的布局形式。所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。
一般会在首页+滑动菜单(SlidingMenu)结合的时候使用
效果:
activity_main.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fl_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </FrameLayout>
MainActivity package com.practice.briefer; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTabHost; import android.support.v4.app.FragmentTransaction; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; import com.practice.briefer.fragment.ContentFragment; import com.practice.briefer.fragment.LeftMenuFragment; /** * 主页面 * * @author ZST 继承第三方插件Library(SlidingMenu) */ public class MainActivity extends SlidingFragmentActivity { private static final String FRAGMENT_LEFT_MENU = "fragment_left_menu"; private static final String FRAGMENT_CONTENT = "fragment_content"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setBehindContentView(R.layout.left_menu);//设置侧边栏menu SlidingMenu slidingMenu = getSlidingMenu();//获取侧边栏对象 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置全屏触摸 slidingMenu.setBehindOffset(200);//设置预留屏幕的宽度 initFragment(); } /** * 初始化fragment,将fragment数据填充给布局文件 */ private void initFragment() { FragmentManager fm = getSupportFragmentManager();//如果要用一个fragment通常要拿到一个fragment控制文件 FragmentTransaction transaction = fm.beginTransaction();//开启事务 transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(), FRAGMENT_LEFT_MENU);//前面是一个布局文件,用后面的那个fragment来替换,最后一个是tag标记,方便以后查找使用Fragment LeftMenuFragment = fm.findFragmentByTag(FRAGMENT_CONTENT); transaction.replace(R.id.fl_content, new ContentFragment(), FRAGMENT_CONTENT);//用fragment替换fragmentayout transaction.commit();//提交事务 //Fragment leftMenuFragment = fm.findFragmentByTag(FRAGMENT_CONTENT); } }
BaseFragment.java package com.practice.briefer.fragment; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * fragment基类 * * @author ZST fragment有自己的生命周期,实现其生命周期的各种方法 * 这个是基类的fragment,是基础的fragment,控制侧边栏和主页等的子类的fragment * */ public abstract class BaseFragment extends Fragment { public Activity myActivity; // fragment创建 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myActivity = getActivity(); } // 处理fragment的布局,这个是基类的布局,让子类的布局实现view @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return initViews(); } // 依附于activity的创建完成 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData();// 界面创建完成了,view已经画完了,则可以初始化一下页面数据 } // 必须让孩子实现,可以搞成抽象的类 public abstract View initViews(); // 初始化数据。因为子类加载页面会有很多的数据,如果是静态的,可以不实现 public void initData() { } }
ContentFragment.java package com.practice.briefer.fragment; import com.practice.briefer.R; import android.view.View; public class ContentFragment extends BaseFragment { @Override public View initViews() { View view = View.inflate(myActivity, R.layout.fragment_content, null); return view; } }
fragment_content.xml <?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_left_menu --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是fragment_主页面页面" /> </LinearLayout>
类之间的关系和作用在印象笔记。