仿知乎日报第四篇:MainActivity使用SlidingMenu开源项目完成基本的结构
2016-09-19 15:44
363 查看
一.完成目标:使用SlidingMenu开源项目实现向左滑出现菜单的效果。
二.具体代码
1.菜单区的布局,只有一个FrameLayout,之后会用LeftFragment替代掉(leftcontent.xml)
2. 内容区的布局,只有一个FrameLayout,之后会用MainFragment替代掉(maincontent.xml)
3.继承SlidingFragmentActivity,将两个布局放到菜单区,内容区,并为SlidingMenu进行一些设置(MainActivity.java)
4.
1)创建两个fragment,分别为LeftFragment,MainFragment,这两个有一些共性,所以可以抽出一个父Fragment。(BaseFragment.java)
2)为了方便管理,可以创建一个fragment包,这几个fragment都放在这个包里面
3)创建LeftFragment (LeftFragment.java)
4)创建MianFrament (MainFragement.java)
5)前面创建的两个布局,里面的两个FrameLayout分别用LeftFragment,MainFragment来代替
二.具体代码
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; } }
相关文章推荐
- 使用SlidingMenu开源项目
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- 开源项目SlidingMenu的简单使用
- 开源项目SlidingMenu和ActionBarSherlock结合使用
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用
- Android SlidingMenu 开源项目使用示例(一)
- Android开源项目SlidingMenu的使用
- 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用
- 滑动菜单栏(一)开源项目SlidingMenu的使用
- 开源项目SlidingMenu的使用
- 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用
- 开源项目SlidingMenu和ActionBarSherlock结合使用
- 【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用
- 滑动菜单栏之开源项目SlidingMenu的使用
- 滑动菜单栏之开源项目SlidingMenu的使用
- Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
- Android开源项目——SlidingMenu的使用