侧滑抽屉:Drawer与Toolbar的简单使用详解

本文详细介绍了在Android中如何使用Drawer和Toolbar,包括自定义titlebar,整体界面布局,以及侧滑抽屉的实现。重点讲解了Drawer的布局分布,自定义titlebar的设置方法,并提供了相关代码示例,帮助读者深入理解这两个组件的使用。

之前写个一篇Drawer与Toolbar的简单使用 - An_nA的博客 - 优快云博客 http://blog.youkuaiyun.com/an_nal/article/details/76174332解释Drawer的用法不是很详细,此帖子详细讲解一下。

布局文件样式:

1.整体分布

顶部自定义titlebar(可设置drawer开关图片,drawer所在的位置:左、右),中心布局样式自定义(此处为listview),右外侧drawer布局样式自定义(名为layout_search)。

2.自定义titlebar

1.布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"        android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:elevation="5dp"
    android:background="@color/app_main">
    <RelativeLayout
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="45dp">
    <TextView
        android:paddingRight="10dp"
        android:visibility="gone"
        android:textSize="14sp"
        android:paddingLeft="15dp"
        android:gravity="center_vertical"
        android:drawableLeft="@mipmap/ic_back"
        android:layout_centerVertical="true"
        android:textColor="@color/app_white"
        android:id="@+id/back"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"/>
        <TextView
            android:id="@+id/title"
            android:layout_centerInParent="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textSize="16sp"
            android:textColor="@color/app_white"/>
   
        <ImageView
            android:visibility="gone"
            android:layout_centerVertical="true"
            android:id="@+id/title_right_img"
            android:layout_alignParentRight="true"
            android:gravity="center"
            android:paddingLeft="10dp"
            android:paddingRight="20dp"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    </RelativeLayout>
</RelativeLayout>

2.代码:

public class TitleBar extends RelativeLayout {

    private TextView back;
    private TextView title;
    private ImageView rightImg;

    public TitleBar(Context context) {
        super(context,null);
    }

    public TitleBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    private void initView(Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_titlebar, this,true);
        back = (TextView) view.findViewById(R.id.back);
        title = (TextView) view.findViewById(R.id.title);     
        rightImg = (ImageView) findViewById(R.id.title_right_img);
    }
    public void setTitle(String str){
        title.setText(str);
    }
    public void setBackText(String str){
        back.setText(str);}
    public void setBackListener(OnClickListener listener){
        back.setVisibility(VISIBLE);
        back.setOnClickListener(listener);
    }   
    public void setRightImg(int resId,OnClickListener listener){
        rightImg.setImageResource(resId);
        rightImg.setVisibility(VISIBLE);
        rightImg.setOnClickListener(listener);
    }
}

3.整体界面

1.布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/app_gray_bg">
<com.android.uoso.limspad.views.TitleBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/title_bar"/>
    <android.support.v4.widget.DrawerLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/drawer">
        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="right"
            android:orientation="vertical">
            <include layout="@layout/layout_search" />
        </LinearLayout>

    </android.support.v4.widget.DrawerLayout>
</LinearLayout>


1.当在中心布局写了view(此处是listview)后,才会出现打开drawer后,中心是灰色的样式,若中心没有任何布局控件则无此效果。
2.titleBar的右侧图片无旋转动画,需要的自行添加哦。

2.代码:
给titleBar设置顶部标题、顶部右侧drawer开关图片、返回键监听事件:

titleBar.setTitle("页面顶部标题");
        titleBar.setBackListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        titleBar.setRightImg(R.mipmap.ic_drawer, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (drawer.isDrawerOpen(Gravity.RIGHT)) {
                    //右侧关闭drawer
                    drawer.closeDrawer(Gravity.RIGHT);
                } else {
                    //右侧打开drawer
                    drawer.openDrawer(Gravity.RIGHT);
                }
            }
        });
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值