仿知乎日报第四篇:MainActivity使用SlidingMenu开源项目完成基本的结构
来源:互联网 发布:python macd函数 编辑:程序博客网 时间:2024/05/27 20:14
一.完成目标:使用SlidingMenu开源项目实现向左滑出现菜单的效果。
二.具体代码
1.菜单区的布局,只有一个FrameLayout,之后会用LeftFragment替代掉(leftcontent.xml)
<?xml version="1.0"encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/left_content" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout>
2. 内容区的布局,只有一个FrameLayout,之后会用MainFragment替代掉(maincontent.xml)
<?xml version="1.0"encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_content" > </FrameLayout>
3.继承SlidingFragmentActivity,将两个布局放到菜单区,内容区,并为SlidingMenu进行一些设置(MainActivity.java)
public class MainActivity extends SlidingFragmentActivity { private static final String MAIN_MENU_TAG = "MAIN_MENU_TAG"; private static final String LEFT_MENU_TAG = "LEFT_MENU_TAG"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); initView(); initData(); } private void initData() { FragmentManager fragmentManager =getSupportFragmentManager(); FragmentTransaction transaction =fragmentManager.beginTransaction(); MainContentFragment mainContentFragment = newMainContentFragment(); transaction.replace(R.id.main_content,mainContentFragment,MAIN_MENU_TAG); LeftContentFragment leftContentFragment = new LeftContentFragment(); transaction.replace(R.id.left_content,leftContentFragment,LEFT_MENU_TAG); transaction.commit(); } privatevoid initView() {// 设置内容区的布局 setContentView(R.layout.maincontent);// 设置菜单区的布局 setBehindContentView(R.layout.leftcontent); SlidingMenu slidingMenu = getSlidingMenu();// 只显示左侧的菜单 slidingMenu.setMode(SlidingMenu.LEFT);// 屏幕的任何地方滑动都能划出菜单 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 滑出菜单后,留给内容区的部分只有100 slidingMenu.setBehindOffset(100); } public MainContentFragment getMainContentFragment(){ FragmentManager fragmentManager = getSupportFragmentManager(); MainContentFragment mainContentFragment =(MainContentFragment) fragmentManager.findFragmentByTag(MAIN_MENU_TAG); return mainContentFragment; } public LeftContentFragment getLeftContentFragment(){ FragmentManager fragmentManager = getSupportFragmentManager(); LeftContentFragment leftContentFragment =(LeftContentFragment) fragmentManager.findFragmentByTag(LEFT_MENU_TAG); return leftContentFragment; } @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
4.
1)创建两个fragment,分别为LeftFragment,MainFragment,这两个有一些共性,所以可以抽出一个父Fragment。(BaseFragment.java)
public abstract class BaseFragment extends Fragment { private View root; protected MainActivity mainActivity; /* * 在这个方法中做一些初始化的工作 */ @Override public void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState);// 拿到所在的上下文Context,即MainActivity(Activity类是继承于Context的) mainActivity = (MainActivity)getActivity(); } /* * 在这个方法中加载fragment的布局 */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ root = initView(); returnroot; } /** * initView设置为抽象方法,则子fragment都必须实现initView方法,并在该方法内实现各自的布局 */ protected abstract View initView(); /* * 该方法内可以加载数据,初始化事件 */ @Override public void onActivityCreated(Bundle savedInstanceState) { initData(); initListener(); super.onActivityCreated(savedInstanceState); } /** * 子fragment可以根据需求覆盖 */ protected void initListener() { // TODO自动生成的方法存根 } /** * 子fragment可以根据需求覆盖 */ protected void initData() { // TODO自动生成的方法存根 } }
2)为了方便管理,可以创建一个fragment包,这几个fragment都放在这个包里面
3)创建LeftFragment (LeftFragment.java)
public class LeftFragment extends BaseFragment { @Override protected View initView() { // TODO自动生成的方法存根 return null; } }
4)创建MianFrament (MainFragement.java)
public class MainFragment extends BaseFragment { @Override protected View initView() { // TODO自动生成的方法存根 return null; } }
5)前面创建的两个布局,里面的两个FrameLayout分别用LeftFragment,MainFragment来代替
public class MainActivity extends SlidingFragmentActivity { private static final String MAIN_MENU_TAG = "MAIN_MENU_TAG"; private static final String LEFT_MENU_TAG = "LEFT_MENU_TAG"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); initView(); initData(); } private void initData() {// 拿到FragmentManager对象 FragmentManager fragmentManager =getSupportFragmentManager();// 用FragmentManager拿到FragmentTransaction对象 FragmentTransaction transaction = fragmentManager.beginTransaction(); MainFragment mainContentFragment = new MainFragment();// 用MainFragment来代替Framelayout,注意:第三个参数MAIN_MENU_TAG是为了findFragmentByTag找到MainFragment transaction.replace(R.id.main_content,mainContentFragment,MAIN_MENU_TAG); LeftFragment leftContentFragment = new LeftFragment();// 用LeftFragment来代替Framelayout,注意:第三个参数LEFT_MENU_TAG是为了findFragmentByTag找到LeftFragment transaction.replace(R.id.left_content,leftContentFragment,LEFT_MENU_TAG); // 提交 transaction.commit(); } private void initView() {// 设置内容区的布局 setContentView(R.layout.maincontent);// 设置菜单区的布局 setBehindContentView(R.layout.leftcontent); SlidingMenu slidingMenu = getSlidingMenu();// 只显示左侧的菜单 slidingMenu.setMode(SlidingMenu.LEFT);// 屏幕的任何地方滑动都能划出菜单 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 滑出菜单后,留给内容区的部分只有100 slidingMenu.setBehindOffset(100); } public MainFragment getMainContentFragment(){ FragmentManager fragmentManager = getSupportFragmentManager(); MainFragment mainContentFragment = (MainFragment)fragmentManager.findFragmentByTag(MAIN_MENU_TAG); return mainContentFragment; } public LeftFragment getLeftContentFragment(){ FragmentManager fragmentManager = getSupportFragmentManager(); LeftFragment leftContentFragment = (LeftFragment)fragmentManager.findFragmentByTag(LEFT_MENU_TAG); return leftContentFragment; } @Override public boolean onCreateOptionsMenu(Menu menu){ // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
0 0
- 仿知乎日报第四篇:MainActivity使用SlidingMenu开源项目完成基本的结构
- 仿知乎日报第三篇:MainActivity的布局分析
- 开源框架Slidingmenu的基本使用
- 开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 开源项目SlidingMenu的简单使用
- Android开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 使用SlidingMenu开源项目
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- 滑动菜单栏之开源项目SlidingMenu的使用
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- Android开源项目——SlidingMenu的使用
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- 前端CSS规范大全(转载)
- poj 2586
- webservice之WSDL资料详解
- 51nod1242【矩阵快速幂】
- 商品详情的图片放大效果
- 仿知乎日报第四篇:MainActivity使用SlidingMenu开源项目完成基本的结构
- CSS 属性选择器
- 【MUI】HBuilder class="mui-switch"开关监听
- Qt之生成pdf
- 单例模式
- iOS_Pass iOS hotfix 热更新 JSPatch 个人服务搭建方案
- linux下怎么安装JAVA?
- Linux系统安装
- PHP打印全部