最近流行 左侧抽屉式的导航条菜单,知乎,360,QQ都使用了这样的导航菜单,我们也了解下:
Android Design 的流行趋势:Navigation Drawer 导航抽屉 参考这篇文章:
www.geekpark.net/topics/1837…
1.标题栏(或者actionBar) 做的有个 菜单图标按钮(三条线或者其他)。一般这样的标题栏左侧和右侧都会有图标按钮。如图1所示。
2.点击图标按钮 从左侧向右 慢慢退出一个 菜单视图(View),遮盖在 内容页(首页)的视图上,同时,产生遮盖层。如图2所示。
参考自谷歌开发者网站的示例,在这个页面可以下载到示例。
developer.android.com/training/im…
需要android-support-v4.jar
谷歌提供的抽屉控件: android.support.v4.widget.DrawerLayout
参考这片文章的解释:
blog.csdn.net/xiahao86/ar…
首页(比如叫:MainActivity)内容布局,写一个 android.support.v4.widget.DrawerLayout,它需要包含两个内容视图元素,第一个视图元素是 主显示内容页,第二个是要抽屉弹出的视图。
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
As the main content view, the view below consumes the entire
space available using match_parent in both dimensions.
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
The drawer is given a fixed width in dp and extends the full height of
the container. A solid background is used for contrast
with the content view.
<zyf.demo.navigationdrawer.NavigationMenu
android:id="@+id/navigation_menu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start" >
</zyf.demo.navigationdrawer.NavigationMenu>
</android.support.v4.widget.DrawerLayout>
我在这里写了个自定义控件 “ zyf.demo.navigationdrawer.NavigationMenu " ,
注意它的 android:layout_gravity="start" ,是 start 不是left。
MainActivity需要 为DrawerLayout 注册一个回调事件接口ActionBarDrawerToggle ,这个事件的实现者监听器会获得 抽屉弹出(onDrawerOpened)和关闭(onDrawerClosed)的事件。
MainActivity 的代码
package zyf.demo.navigationdrawer;
import android.os.Bundle;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.graphics.drawable.ColorDrawable;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private NavigationMenu mNavigationMenu;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mNavigationMenu = (NavigationMenu) findViewById(R.id.navigation_menu);
mNavigationMenu.attacthDrawer(mDrawerLayout);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setIcon(
new ColorDrawable(getResources().getColor(
android.R.color.transparent)));
mDrawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout,
R.drawable.ic_notification_content,