android 应用架构随笔五(ActionBar与侧滑菜单DrawerLayout)
ActionBar(V7)的添加非常简单,只需要在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类就可以了,在Android 3.0及更高的版本中,Activity中都默认包含有ActionBar组件。
drawerLayout(V4)是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"> <RelativeLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"> <com.heima.googleplay.widget.PagerTab
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="42dip"
android:background="@drawable/bg_tab"/> <android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tabs"
tools:context=".MainActivity"/>
</RelativeLayout> <FrameLayout
android:id="@+id/start_drawer"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@drawable/bg_tab"></FrameLayout>
</android.support.v4.widget.DrawerLayout>
activity_main.xml
分主页和侧滑页两个页面,侧滑页为:
<FrameLayout
android:id="@+id/start_drawer"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@drawable/bg_tab"></FrameLayout>
start从左到右滑动,end从右到左滑动
继承ActionBarActivity
import android.app.Application;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; public abstract class BaseActivity extends ActionBarActivity { private static BaseActivity mForegroundActivity; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
initView();
} protected abstract void initView() ; @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
this.mForegroundActivity = this;
} public static BaseActivity getForegroundActivity(){
return mForegroundActivity;
}
}
BaseActivity
setContentView(R.layout.activity_main);
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu; import com.heima.googleplay.fragment.AppFragment;
import com.heima.googleplay.fragment.BaseFragment;
import com.heima.googleplay.fragment.FragmentFactory;
import com.heima.googleplay.fragment.GameFragment;
import com.heima.googleplay.fragment.HomeFragment;
import com.heima.googleplay.utils.UIUtils;
import com.heima.googleplay.widget.PagerTab; public class MainActivity extends BaseActivity implements OnPageChangeListener { private PagerTab mTabs;
private ViewPager mPager; @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;
} private class MainAdapter extends FragmentStatePagerAdapter{ private String[] tab_names;
private BaseFragment fragment; public MainAdapter(FragmentManager fm) {
super(fm);
tab_names = UIUtils.getStringArray(R.array.tab_names);
} @Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return tab_names[position];
} @Override
public Fragment getItem(int position) { return FragmentFactory.createFragment(position);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return tab_names.length;
} } @Override
protected void initView() {
setContentView(R.layout.activity_main);
mTabs = (PagerTab) findViewById(R.id.tabs);
mPager = (ViewPager) findViewById(R.id.pager);
MainAdapter adapter = new MainAdapter(getSupportFragmentManager());
mPager.setAdapter(adapter);
//绑定到一起
mTabs.setViewPager(mPager);
mTabs.setOnPageChangeListener(this);
} @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageSelected(int arg0) {
BaseFragment fragment = FragmentFactory.createFragment(arg0);
fragment.show();
} }
MainActivity
android 应用架构随笔五(ActionBar与侧滑菜单DrawerLayout)的更多相关文章
- Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码
Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码 左右側滑效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a ...
- 【转】android官方侧滑菜单DrawerLayout详解
原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0925/1713.html drawerLayout是Support ...
- android官方侧滑菜单DrawerLayout详解
drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物.d ...
- android L 新控件侧滑菜单DrawerLayout 使用教程
介绍 drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产 ...
- Android之侧滑菜单DrawerLayout的使用
在android support.v4 中有一个抽屉视图控件DrawerLayout.使用这个控件,可以生成通过在屏幕上水平滑动打开或者关闭菜单,能给用户一个不错的体验效果. DrawerLayout ...
- Android 高大上的侧滑菜单DrawerLayout,解决了不能全屏滑动的问题
DrawerLayout预览 DrawerLayout主要功能就是 实现侧滑菜单效果的功能,并且可以通过增加一些设置来实现高大上的效果,那么就请看动态图: 注意左上角那个图标,有木有很好玩,哈哈. ...
- Android开发——使用高级的RecyclerView实现侧滑菜单删除功能(SwipeRecyclerView)
使用之前,先简单介绍一下这个SwipeRecyclerView,这是严大(严振杰)基于RecyclerView的进行修改和封装的高级RecyclerView,其可以实现像QQ聊天界面的侧滑删除菜单,和 ...
- AndroidUI 侧滑菜单 DrawerLayout的使用
直接上代码: activity_main.xml: <android.support.v4.widget.DrawerLayout xmlns:android="http://sche ...
- android 应用架构随笔六(Loading加载页面)
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.heima ...
随机推荐
- JS-004-判断元素显示状态
在日常的 web 编程或 UI自动化脚本编写过程中,经常会遇到判断页面元素的显示状态,以对应的执行相应的操作.此文主要以 js 判断页面元素的存在状态为例,简单叙述一下 js 是如何判断元素的显示状态 ...
- 四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName
我以前查一段时间范围内的数据都是在程序里计算好日期再掉查询语句,现在我用下面的函数.SQL SERVER没有查一季度数据的函数. DateDiff函数: 描述 返回两个日期之间的时间间隔. 语法 Da ...
- 用css实现云状提示框
经常会用到云状提示框,如图: 基本框架是这样,以三角在左侧为例: <div class="container"> <div class="content ...
- 二代身份证阅读器(XZX)
问题一 解决方法: 通常我把所有的dll复制到system32文件夹,64位系统复制到sysWOW64文件夹,而且编译选项CPU要选择X86 问题二 解决方法: 图片路径默认是C:\,对C:\没有写的 ...
- 借助fastjson 实体对象转map
private Map<String, Object> object2Map(Object object){ JSONObject jsonObject = (JSONObject) JS ...
- delegate and event
事件是特殊的委托 委托:第一个方法注册用“=”,是赋值语法,因为要进行实例化,第二个方法注册则用的是“+=” 修饰符应该public的时候public,应该private的时候private 事件 ...
- Android 菜单(OptionMenu)
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 一.概述 ...
- RFS_注释
1. 注释的操作如下:
- [ArcEngine]Geotransformation地理变换
Geotransformation 地理变换 The Abridged Molodensky transformation is a three parameter transformation三参 ...
- Add Digits
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...