139 lines
4.8 KiB
Java
139 lines
4.8 KiB
Java
package com.gh.base;
|
|
|
|
import android.graphics.Color;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.support.v7.widget.Toolbar;
|
|
import android.view.MenuItem;
|
|
import android.view.Window;
|
|
import android.view.WindowManager;
|
|
|
|
import com.gh.gamecenter.R;
|
|
import com.readystatesoftware.systembartint.SystemBarTintManager;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Method;
|
|
|
|
/**
|
|
* Created by csheng on 15-10-12.
|
|
*/
|
|
abstract class BaseAppCompatToolBarActivity extends BaseAppCompatActivity implements ToolbarController {
|
|
|
|
private Toolbar mToolbar;
|
|
private SystemBarTintManager mTintManager;
|
|
|
|
// TODO 获取沉浸栏管理,要进行版本判断或者判断是否为空
|
|
protected SystemBarTintManager getTintManager() {
|
|
return mTintManager;
|
|
}
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
initToolbar();
|
|
// Util_Window.initStatusBarColor(getWindow(), ContextCompat.getColor(this, R.color.theme));
|
|
initStatusBar();
|
|
}
|
|
|
|
private void initToolbar() {
|
|
mToolbar = (Toolbar) findViewById(R.id.toolbar_navigation);
|
|
if (mToolbar != null) {
|
|
mToolbar.setTitle("");
|
|
setSupportActionBar(mToolbar);
|
|
}
|
|
}
|
|
|
|
private void initStatusBar() {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
|
setTranslucentStatus(true);
|
|
mTintManager = new SystemBarTintManager(this);
|
|
mTintManager.setStatusBarTintEnabled(true);
|
|
// mTintManager.setNavigationBarTintEnabled(true);
|
|
if (Build.MANUFACTURER.equals("Meizu") || Build.MANUFACTURER.equals("Xiaomi")) {
|
|
mTintManager.setStatusBarTintColor(Color.WHITE);
|
|
} else {
|
|
mTintManager.setStatusBarTintColor(Color.BLACK);
|
|
}
|
|
|
|
switch (Build.MANUFACTURER) {
|
|
case "Meizu":
|
|
try {
|
|
Window window = getWindow();
|
|
if (window != null) {
|
|
WindowManager.LayoutParams lp = window.getAttributes();
|
|
Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
|
|
Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");
|
|
darkFlag.setAccessible(true);
|
|
meizuFlags.setAccessible(true);
|
|
int bit = darkFlag.getInt(null);
|
|
int value = meizuFlags.getInt(lp);
|
|
value |= bit;
|
|
meizuFlags.setInt(lp, value);
|
|
window.setAttributes(lp);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
break;
|
|
case "Xiaomi":
|
|
try {
|
|
Window window = getWindow();
|
|
if (window != null) {
|
|
Class<?> clazz = window.getClass();
|
|
Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
|
|
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
|
|
int darkModeFlag = field.getInt(layoutParams);
|
|
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
|
|
extraFlagField.invoke(window, darkModeFlag, darkModeFlag);
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void setTranslucentStatus(boolean status) {
|
|
Window window = getWindow();
|
|
WindowManager.LayoutParams winParams = window.getAttributes();
|
|
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
|
|
if (status) {
|
|
winParams.flags |= bits;
|
|
} else {
|
|
winParams.flags &= ~bits;
|
|
}
|
|
window.setAttributes(winParams);
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case android.R.id.home:
|
|
return onNavigationIconClicked();
|
|
}
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
|
|
protected abstract boolean onNavigationIconClicked();
|
|
|
|
@Override
|
|
public void setNavigationTitle(int res) {
|
|
mToolbar.setTitle(res);
|
|
}
|
|
|
|
@Override
|
|
public void setNavigationTitle(CharSequence res) {
|
|
mToolbar.setTitle(res);
|
|
}
|
|
|
|
@Override
|
|
public Toolbar getToolBar() {
|
|
return mToolbar;
|
|
}
|
|
|
|
}
|