Android UI :Try of Toolbar

        这几天刚刚接触到Android开发,当然也是因为公司的需要,作为一个developer,肯定希望自己的应用能够美观,不然看着自己都头痛,更何况别人呢,所以从今天开始我要开始记下我的心得,好记性不如烂笔头嘛,而且自己写的东西也比较适合自己解决问题,也希望对小伙伴们有所帮助,废话不多说,来看看我第一个要记下的Object是谁,hiahia,就是大家所熟悉的Toolbar了,它的一个优点是本身就是一个ViewGroup,所以它所包含的东西可以DIY啦。不信你看下图:

     

也许你发现了,它是android.support.v7.widget的Toolbar,所以在你的build.gradle配置文件中加入

compile 'com.android.support:design:23.4.0'

  我们先来简单的认识一下这个Toolbar,作为MD(material design)的一个ViewGroup,看看包含了哪些东西(更多具体的请自己去官网看,我这里指说我平常用得到的)


好了,我们看到了Toolbar的一些经常用得到的区域或者属性(这张图片也是用的别人文章里面的),所代表的东西大家也都能一目了然,首先来看看我做出来的效果


那么是怎么实现的呢,首先我的这个Toolbar是嵌套在DrawerLayout之中的,关于DrawerLayout我下一篇文章再讲。

我们来看看整个的布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/mydrawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.lht.test.MainActivity"
    android:layout_gravity="start"
    >
    <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f6f4f4">
           <android.support.design.widget.AppBarLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">

               <include android:id="@+id/mtoolbar" layout="@layout/toolbar"/>

           </android.support.design.widget.AppBarLayout>

           <include layout="@layout/content_main"/>

    </android.support.design.widget.CoordinatorLayout>

           <include  layout="@layout/common_drawer"/>

</android.support.v4.widget.DrawerLayout>
这里提到了本文没有提到的布局,CoodinatorLayout、AppBarLayout、DrawerLayout,这些在后面都会一一讲解,本文重点讲Toolbar。

大家看到了Toolbar被包含在AppBarLayout之中,布局文件为toolbar.xml,好,我们来看看它的布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:toolbar="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    toolbar:navigationIcon="@drawable/abc_ic_ab_back_mtrl_am_alpha"
    toolbar:titleMarginStart="80dp"
    android:background="#FF4081"
    toolbar:title="ToolbarDemo"
    toolbar:theme="@style/ToolbarTheme"
    toolbar:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    >

</android.support.v7.widget.Toolbar>
这里要重点说一下,设置Toolbar的一些属性必须要添加
xmlns:toolbar="http://schemas.android.com/apk/res-auto"
然后看看这个布局文件有什么,首先添加了一个Toolbar,设置了标题,背景,主题,以及菜单的主题popupTheme,主题文件实在res/values/styles.xml中进行创建,整体效果在上面的图片中能看出来,其他的一些属性大家也都能看出代表什么,接下来看看我的style.xml文件


所设置的颜色在左边也能看到,之前我要把左上角的按钮的颜色改为白色,但是又不用白色的按钮去替换,在网上找了好多文章,都是说什么深色主题和浅色主题的,到最后根本没有解决我的问题,也许是我智商有限,最后找到了一篇文章的解决办法是在Toolbar引用的主题设置中添加如下代码

<item name="android:colorControlNormal">#FFFFFF</item>
中间为你想设置的颜色值,想让按钮为什么颜色就是什么颜色,这也是我搞了好久都没搞好的,是不是体会到了Toolbar所带来的DIY的乐趣,不仅可以设置颜色,还可以设置菜单的弹出动作,大家可以去网上查看,有很多文章,接下来为Toolbar添加菜单,就是实现以下的效果

这张图是别人的,我手机没电了。。。。不能截图给大家看了。。。。

添加菜单的第一步就是要创建菜单,在res/menu目录下进行创建,下面是我创建的菜单mymenu.xml(不懂得赶紧去学一下)

<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="com.melo.blog.wigetdemo.MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="1"
        android:title="menu0"
        app:showAsAction="never"
       />

    <item
        android:id="@+id/action_about"
        android:orderInCategory="2"
        android:title="menu1"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_share"
        android:orderInCategory="3"
        android:title="menu"
        app:showAsAction="never"/>

    <item
        android:id="@+id/action_like"
        android:orderInCategory="4"
        android:title="menu"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_collect"
        android:orderInCategory="5"
        android:title="menu"
        app:showAsAction="never" />

</menu>
其中showAsAction有几个值:

never:只在菜单弹出的时候显示

isRoom:如果Toolbar有足够的空间就直接显示在Toolbar上面,如果没有就显示在弹出的菜单列表中

最后填充menu,在activity中对点击事件可以进行监听,代码如下:

import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {

     DrawerLayout drawerlayout;
    Toolbar  toolbar;
    ActionBarDrawerToggle mToggle ;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         initView();
         initListener();
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onPostCreate(savedInstanceState, persistentState);
    }

    private void initView() {
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.mtoolbar);
        setSupportActionBar(toolbar);
        drawerlayout=(DrawerLayout)findViewById(R.id.mydrawer);
        mToggle = new ActionBarDrawerToggle
                (this,drawerlayout,toolbar, R.string.open,R.string.close);
        drawerlayout.addDrawerListener(mToggle);

    }

    private void initListener() {
        toolbar.setOnMenuItemClickListener(this);
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
            case R.id.action_settings:
                Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_about:
                Toast.makeText(this, "action_about", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_collect:
                Toast.makeText(this, "action_collect", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_like:
                Toast.makeText(this, "action_like", Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_share:
                Toast.makeText(this, "action_share", Toast.LENGTH_SHORT).show();
                break;
        }
        return false;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mymenu,menu);

        return super.onCreateOptionsMenu(menu);
    }
}
如果有什么问题请留言,阿里嘎多~~~






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值