框架布局是最简单的布局形式。所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。
一般会在首页+滑动菜单(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>
类之间的关系和作用在印象笔记。