下载导入工程使用即可
本列Toolbar使用步骤
- 继承BaseActivity重写setupData()方法
setContentView(R.layout.activity_main, R.string.mainPageTitle, MODE_NO_NAVIGATION);
- menu的使用
setupData()里设置
mToolbar.setOnMenuItemClickListener(onMenuItemClick);
方法
private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_edit:
showToast("单击了编辑");
break;
case R.id.action_share:
showToast("单击了分享");
break;
case R.id.action_settings:
showToast("单击了设置");
break;
}
return true;
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
引用Toolbar的布局
include_toolbar
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@id/id_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:orientation="vertical"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<TextView
android:id="@id/id_pageTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/white"
android:textSize="18sp" />
</android.support.v7.widget.Toolbar>
Toolbar嵌入BaseActivity中
- 变量
// 页面无 Navigation 的模式
public static final int MODE_NO_NAVIGATION = 0;
// 页面有返回 Navigation 的模式
public static final int MODE_BACK_NAVIGATION = 1;
protected Toolbar mToolbar;
protected TextView mPageTitle;//标题
- onCreate()里
这句话是为其他继承baseActivity类调用的(必须重写)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupData();
}
// 布局数据初始化
protected void setupData() {
}
- 方法
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(layoutResID);
}
// 重载 setContentView
public void setContentView(@LayoutRes int layoutResID, int resTitleID, int pageMODE) {
super.setContentView(layoutResID);
setToolbarStatus();
mToolbar = $(R.id.id_toolbar);
mPageTitle = $(R.id.id_pageTitle);
mPageTitle.setText(resTitleID);
setSupportActionBar(mToolbar);
//noinspection ConstantConditions
getSupportActionBar().setDisplayShowTitleEnabled(false);
switch (pageMODE) {
case MODE_NO_NAVIGATION:
// 页面没有返回箭头
break;
case MODE_BACK_NAVIGATION:
// 页面有返回剪头
mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_18dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
break;
// 其它
}
}
// 设置状态栏颜色
protected void setToolbarStatus() {
ToolbarUtil.setColor(this, getResources().getColor(R.color.colorPrimary));
}
@SuppressWarnings("unchecked")
public <T> T $(int resID) {
return (T) findViewById(resID);
}
工具类ToolbarUtil
代码:
package io.github.isayes.mytoolbar;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
public class ToolbarUtil {
private static final int DEFAULT_STATUS_BAR_ALPHA = 15;
/**
* 设置状态栏颜色
*/
public static void setColor(Activity activity, int color, int statusBarAlpha) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 生成一个状态栏大小的矩形
View statusView = createStatusBarView(activity, color, statusBarAlpha);
// 添加 statusView 到布局中
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
decorView.addView(statusView);
setRootView(activity);
}
}
/**
* 设置根布局参数
*/
private static void setRootView(Activity activity) {
ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
rootView.setFitsSystemWindows(true);
rootView.setClipToPadding(true);
}
/**
* 生成一个和状态栏大小相同的半透明矩形条
*/
private static View createStatusBarView(Activity activity, int color, int alpha) {
// 绘制一个和状态栏一样高的矩形
View statusBarView = new View(activity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setLayoutParams(params);
statusBarView.setBackgroundColor(calculateStatusColor(color, alpha));
return statusBarView;
}
/**
* 获取状态栏高度
*/
private static int getStatusBarHeight(Context context) {
// 获得状态栏高度
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
return context.getResources().getDimensionPixelSize(resourceId);
}
/**
* 计算状态栏颜色
*/
private static int calculateStatusColor(int color, int alpha) {
float a = 1 - alpha / 255f;
int red = color >> 16 & 0xff;
int green = color >> 8 & 0xff;
int blue = color & 0xff;
red = (int) (red * a + 0.5);
green = (int) (green * a + 0.5);
blue = (int) (blue * a + 0.5);
return 0xff << 24 | red << 16 | green << 8 | blue;
}
/**
* 设置状态栏颜色
*/
public static void setColor(Activity activity, int color) {
setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA);
}
/**
* 直接设置状态栏纯色 不加半透明效果(全透明)
*/
public static void setColorNoTranslucent(Activity activity, int color) {
setColor(activity, color, 0);
}
}