ToolBar 简单使用

ToolBar 简单使用

ToolBar 是在 android 5.0之后推出的一款用来替代 ActionBar 的 View。ActionBar 是Activity的一部分,不能用在其他视图层次上(自定义的 actionBar 除外)。而 ToolBar 可以用于任何层次的视图,没有和 Activity 之间有绑定的关系。使用起来也更加的灵活多变。

ToolBar 中可以含有多样的元素

  • Navigation Button

  • Branded Logo Image

  • Title And SubTitle

  • Custom Views

  • Action Menu

navigation button

一个导航按钮

branded logo image

一个品牌logo

title and subtitle

标题和子标题

custom views

一个或多个自定义视图

action menu

一个菜单

使用

  1. 引入相关的依赖
compile 'com.android.support:appcompat-v7:27.1.1'
  1. activity继承自 AppCompatActivity
public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
  1. 设置主题为NoActionBar
在当前的style中添加这2条就可以不显示actionbar
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
  1. 布局中引入ToolBar
<?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"
tools:context="com.test.toolbardemo.toolbardemo.MainActivity"> <android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:background="?colorPrimary"
app:title="Title"
app:subtitle="subtitle"
android:gravity="center_vertical"
app:navigationIcon="@mipmap/ic_launcher"
app:logo="@mipmap/ic_launcher_round"
android:layout_height="wrap_content">
<!-- 可以在这里自己定义自己的 actionbar 布局 -->
</android.support.v7.widget.Toolbar> </LinearLayout>
  1. 在activity中进行actionbar的设置等
public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
private Toolbar toolbar; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
//如果处理了点击事件就返回true switch (item.getItemId()){
case R.id.menu_add:
Log.i(TAG, "onMenuItemClick: Add");
break;
case R.id.menu_update:
Log.i(TAG, "onMenuItemClick: Update");
break;
case R.id.menu_about:
Log.i(TAG, "onMenuItemClick: About");
break;
case R.id.menu_delete:
Log.i(TAG, "onMenuItemClick: Delete");
break;
case R.id.menu_query:
Log.i(TAG, "onMenuItemClick: Query");
break;
}
Log.i(TAG, "onMenuItemClick: ");
return true;
}
}); } //后续处理菜单和菜单的点击事件和之前的menu的使用方式类似 @Override
public boolean onCreateOptionsMenu(Menu menu) {
//设置menu
getMenuInflater().inflate(R.menu.toolbar,menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
//处理导航按钮的点击事件,已经处理了就返回true
if(item.getItemId() == android.R.id.home){
Log.i(TAG, "onOptionsItemSelected: Navigation");
return true;
}
return super.onOptionsItemSelected(item);
}
}
  1. menu菜单文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add" android:title="add"></item>
<item android:id="@+id/menu_delete" android:title="delete"></item>
<item android:id="@+id/menu_update" android:title="update"></item>
<item android:id="@+id/menu_query" android:title="delete"></item>
<item android:id="@+id/menu_about" android:title="about"></item>
</menu>
  1. 测试

    logcat捕获的日志
07-20 02:20:07.785 1826-1826/com.test.toolbardemo.toolbardemo I/MainActivity: onOptionsItemSelected: Navigation
07-20 02:20:15.217 1826-1826/com.test.toolbardemo.toolbardemo I/MainActivity: onMenuItemClick: Update
07-20 02:20:15.217 1826-1826/com.test.toolbardemo.toolbardemo I/MainActivity: onMenuItemClick:
  1. 解决个小问题

    在使用的过程中,android studio 创建工程时提示支持了appcompat-v7:28+,我自己修改为自己需要用的23,之后就是一致出问题,发现只有compileSDKVersion,buildToolsVersion以及support库的版本一致时才正常,统一修改为23之后,发现提示我
Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum required is 25.0.0
<a href="install.build.tools">Install Build Tools 25.0.0, update version in build file and sync project

之后上网找了下,是因为工程的gradle插件版本要求最低支持到25,就是在project.build文件中的插件配置

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

这时候可以选择是降低gradle插件的版本或者是提高sdk的版本,我选择了提高sdk的版本

完整的app.gradle代码

apply plugin: 'com.android.application'
// compileSdkVersion,buildToolsVersion,support库的大版本必须一致,不然一堆问题
android {
compileSdkVersion 25
buildToolsVersion '25.0.3'
defaultConfig {
applicationId "com.test.toolbardemo.toolbardemo"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
} dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
上一篇:java, double转String, 去掉0结尾的小数位


下一篇:Android自动化测试Uiautomator--UiSelector接口简介