优美的UI---Material Design

1.Toolbar的用法

1.1关于标题栏的那些事

每个应用都有默认的标题栏
在AdroidManifest.xml中:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">//在这个样式中,就有关于标题栏的
        ..../values/style.xml中
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" 
   		 //默认的标题栏
    	parent="Theme.AppCompat.Light.DarkActionBar">
    
   		 //这里是关于标题栏画面的一些属性
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>//标题栏颜色
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>//状态栏颜色
        <item name="colorAccent">@color/colorAccent</item>//选中状态颜色
        
    </style>

</resources>

不带Actionbar的主题有Theme.AppCompat.Light.NoActionBar和Theme.AppCompat.NoActionBar,两者的区别自己试一下就知道了

1.2 toolbar使用

<android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
             	android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"//设置标题栏颜色主题
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"//设置标题栏弹出式主题,比如菜单项的弹出

当然还需要在活动中设置这个toolbar

		toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

1.3 toolbar的其它使用

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/item1"
        android:icon="@drawable/icon"
        android:title="item1"
        app:showAsAction="always"
        />

    <item
        android:id="@+id/item2"
        android:icon="@drawable/icon"
        android:title="item2"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/item3"
        android:icon="@drawable/icon"
        android:title="item3"
        app:showAsAction="never"/>

</menu>

app:showAsAction表示显示的位置,
always:永远在标题栏显示,位置不够不显示
ifRoom:空间够则显示,否则收回菜单栏
never:在菜单栏里显示
在标题栏显示的只显示icon,在菜单栏里显示的只显示title

2.滑动菜单

2.1 DrawLayout

这种布局方式,允许放入两个子控件,第一个是主屏幕显示的内容,第二个是滑动菜单里显示的内容

2.1.1设置xml

其中在第二个子控件,也就是滑出菜单的xml中,要设置一个重要属性
表示根据系统习惯从左还是从右滑出:
表示根据系统习惯从左还是从右滑出
优美的UI---Material Design_第1张图片

2.1.2在活动中添加提示按钮

ActionBar actionBar = getSupportActionBar();
        if(actionBar!=null){
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeAsUpIndicator(R.drawable.icon);
        }

对这个按钮监听,这个按钮的id始终为android.R.id.home
其中Gravity.START是与2.1.1中的重要属性对应的
优美的UI---Material Design_第2张图片

2.2 NavigationView

一个将滑出界面布置精美的view
NavigationView是由menu和headerLayout组成的

2.2.1 menu的设置

优美的UI---Material Design_第3张图片

2.2.2headerLayout的设置

优美的UI---Material Design_第4张图片
其中CircleImageView是将图像呈现成圆形的一个开源项目,需要implementation ‘com.github.bumptech.glide:glide:3.7.0’

2.2.3 通过NavigationView将两者组合作为滑动菜单界面

优美的UI---Material Design_第5张图片

2.2.4设置监听

如下是对id为item_call的item进行监听
优美的UI---Material Design_第6张图片

3.悬浮按钮和可交互提示

3.1悬浮按钮FloatingActionButton

用法和Button差不多

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:src="@drawable/icon"
            app:elevation="8dp"/>

要说明一点的是
app:elevation属性是给FloatingActionButton指定一个高度值,值越大,投影效果越广,但是越淡,值越小则相反
监听事件也是和Button一样的

3.2 Snackbar

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Snackbar.make(v,"点我干啥",Snackbar.LENGTH_SHORT)
                        .setAction("点我撤销", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(MainActivity.this,"你说撤销就撤销啊",Toast.LENGTH_SHORT).show();
                            }
                        }).show();
            }
        });

Snackbar和Toast用法大致相同,只不过多了一个监听
需要说明一点的是,传入的第一个参数v,只要是当前界面任意一个view都行,Snackbar会根据这个view自动查找最外层的布局,用于展示Snackbar

3.3智能化的布局CoordinatorLayout

CoordinatorLayout可以监听其所有子控件的各种事件,然后自动为我们做出最为合理的响应。
CoordinatorLayout可以说是一个加强版的FrameLayout,这个布局也是由Design Support提供的,所以记得implementation ‘com.android.support:cardview-v7:28.0.0’。
未完待续。。

你可能感兴趣的:(Android开发)