每个应用都有默认的标题栏
在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,两者的区别自己试一下就知道了
<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);
<?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
这种布局方式,允许放入两个子控件,第一个是主屏幕显示的内容,第二个是滑动菜单里显示的内容
其中在第二个子控件,也就是滑出菜单的xml中,要设置一个重要属性
表示根据系统习惯从左还是从右滑出:
ActionBar actionBar = getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.icon);
}
对这个按钮监听,这个按钮的id始终为android.R.id.home
其中Gravity.START是与2.1.1中的重要属性对应的
一个将滑出界面布置精美的view
NavigationView是由menu和headerLayout组成的
其中CircleImageView是将图像呈现成圆形的一个开源项目,需要implementation ‘com.github.bumptech.glide:glide:3.7.0’
用法和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一样的
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
CoordinatorLayout可以监听其所有子控件的各种事件,然后自动为我们做出最为合理的响应。
CoordinatorLayout可以说是一个加强版的FrameLayout,这个布局也是由Design Support提供的,所以记得implementation ‘com.android.support:cardview-v7:28.0.0’。
未完待续。。