文档章节

android官方控件DrawerLayout和Toolbar地配合使用

fantasiter
 fantasiter
发布于 2015/08/23 16:14
字数 770
阅读 1129
收藏 3
首先说下配置工作,因为现在Android机所采用的版本4.0以下都比较少了,所以我司的APP基本是把最低版本定在了4.0(3.0以Pad为主嘛,至于android的Pad,算了,不提也罢),否则会报“java.lang.IllegalArgumentException: AppCompat does not support the current theme features”的错误,[stackOverFlow上有相关错误](http://http://stackoverflow.com/questions/29784124/java-lang-illegalargumentexception-appcompat-does-not-support-the-current-theme)。下面上代码,首先是Style文件:
//此处主题必须设置为Theme.AppCompat.NoActionBar,即隐藏ActionBar
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>

        <!-- Actionbar color 此处是ToolBar背景色-->
        <item name="colorPrimary">@color/accent_material_dark</item>
        <!--Status bar color 此处是状态栏颜色-->
        <item name="colorPrimaryDark">@color/accent_material_light</item>
        <!--Window color-->
        <item name="android:windowBackground">@color/dim_foreground_material_dark</item>
    </style>
</resources>

接下来是Layout文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity">

    <!--Toolbar的背景使用Style里的定义-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:layout_alignParentTop="true"
        />
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer"
        android:layout_below="@+id/toolbar"
             android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <!--DrawerLayout内部的布局份有且只能两部分,主内容区域在嘴上,侧滑栏区域在下面-->
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:text="背景部分"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </FrameLayout>
        <!--ListView必须设置layout_gravity,表明侧滑栏滑出的方向-->
        <ListView
            android:id="@+id/listDrawer"
            android:layout_gravity="right"
            android:layout_width="100dp"
            android:layout_height="match_parent"/>
    </android.support.v4.widget.DrawerLayout>


</RelativeLayout>

忽然想到了,attr这个属性是针对styles文件进行解析的,匹配对应名字的颜色

最后是Activity:

package waiqin.example.com.drawerlayoutapp;

import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private DrawerLayout drawer;
    private ListView list;
    private String [] array = {"条目1","条目2","条目3"};
    private ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,array);
        initToolbar();
        initView();
    }

    private void initToolbar()
    {
        toolbar = (Toolbar) findViewById(R.id.toolbar);

        //设置toolbar标题
        toolbar.setTitle("Drawer");
        //设置Navigation
        toolbar.setNavigationIcon(R.drawable.common_btn_back);
        //设置点击Navigation的方法
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        //为了让ToolBar各项设置都生效的话,这个方法必须放到最后
        setSupportActionBar(toolbar);
    }

    private void initView()
    {
        drawer = (DrawerLayout) findViewById(R.id.drawer);
        list = (ListView) findViewById(R.id.listDrawer);
        list.setAdapter(adapter);
    }

    //此方法定义Menu的布局样式,返回false则不显示Menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }


    //此方法定义点击Menu按钮产生的事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        //点击侧滑弹出的事件
        if (id == R.id.action_settings) {
            if (drawer.isDrawerOpen(Gravity.RIGHT))
            {
                drawer.closeDrawer(Gravity.RIGHT);
            }
            else
            {
                drawer.openDrawer(Gravity.RIGHT);
            }
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}

最后是Menu的布局文件:

<menu 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" tools:context=".MainActivity">
    <!--设置toolbar右侧setting部分的图标内容,showAsAction设置成always图片才能被自己的成功替换掉-->
    <item android:id="@+id/action_settings" android:title="@string/action_settings"
        android:icon="@drawable/common_btn_submit_nor"
        android:orderInCategory="100" app:showAsAction="always" />
</menu>

![效果如图:](https://static.oschina.net/uploads/img/201508/23161841_jjG2.jpg "在这里输入图片标题")

© 著作权归作者所有

fantasiter
粉丝 1
博文 117
码字总数 24978
作品 0
青岛
私信 提问
Android 之 Material Design(三)—DrawerLayout+NavigationView+Toolbar(点击icon打开关闭侧滑菜单)

前言 关于Material Design相关的控件,前两篇文章已经介绍了一些常用的控件了,这篇文章主要介绍一下DrawerLayout+NavigationView+Toolbar。这样Material Design的也介绍的差不多了,剩下Rec...

AFinalDream
2017/06/22
0
0
Material Design 控件

只能包含一个子View,setOnRefreshListener设置下拉刷新监听 问题:以下布局会出现下拉和列表滑动冲突问题 width="matchparent"android:layoutheight="matchparent"> width="matchparent"an......

CrazyManDF
2016/03/23
250
0
Android控件之Toolbar + DrawerLayout的使用

载请标明出处: http://blog.csdn.net/u011974987/article/details/50963495; 最近闲着没事儿,在关注一些遵循最新的Material Design设计规范的应用和效果,感觉很高大上;一直都没有去尝试...

徐昊
2016/09/12
18
0
DrawerLayout+NavigationView仿摩拜单车主界面

曾经的侧滑菜单通常是使用SlidingMenu,但是用起来设置属性太多,使用繁琐。后来官方出来DrawerLayout,使侧滑控件得以转正,功能效果更佳。这里是我用DrawerLayout+NavigationView仿摩拜单车...

翻滚吧李博
2017/12/27
0
0
QQ最新版布局猜想

最近想实现类似QQ的布局,使用toolbar,tablayout,viewpager,drawerlayout等控件,碰到了一些问题。 底部按钮切换之后,每个页面头部布局不一样。使用toolbar的话,需要在每个fragment中使用单...

java9
2016/02/15
163
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
9
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
920
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部