baseactivity实现封装toolbar
2017-01-17 16:24
330 查看
最近看了material design发现toolbar是一个非常好用的东西,以前做项目的时候喜欢写导航条然后baseactivity处理,最后一直include,今天我封装了baseactivity实现全局继承toolbar,下面说一下我的实现思路首先写baseactivity,继承AppCompatActivity 在baseactivity里面封装一些公共用法比如进度加载匡,等等 。此次封装实现了代码的复用性,提高了布局的优化,不用一直include布局能最大的简化布局 ,只需要继承basedetailactivity就可以自带toolbar
github地址:https://github.com/yuanchongzhang/MyDefineToolBar 欢迎star
@SuppressWarnings("unchecked")
public <T extends View> T findView(int id) {
return (T) findViewById(id);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSystemBarTint();
}
/** 子类可以重写改变状态栏颜色 */
protected int setStatusBarColor() {
return getColorPrimary();
}
/** 子类可以重写决定是否使用透明状态栏 */
protected boolean translucentStatusBar() {
return false;
}
/** 设置状态栏颜色 */
protected void initSystemBarTint() {
Window window = getWindow();
if (translucentStatusBar()) {
// 设置状态栏全透明
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
return;
}
// 沉浸式状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//5.0以上使用原生方法
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(setStatusBarColor());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//4.4-5.0使用三方工具类
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
/* SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintColor(setStatusBarColor());*/
}
}
/** 获取主题色 */
public int getColorPrimary() {
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
return typedValue.data;
}
/** 获取深主题色 */
public int getDarkColorPrimary() {
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValue, true);
return typedValue.data;
}
/** 初始化 Toolbar */
public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, String title) {
toolbar.setTitle(title);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(homeAsUpEnabled);
}
public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, int resTitle) {
initToolBar(toolbar, homeAsUpEnabled, getString(resTitle));
}
public void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
private ProgressDialog dialog;
public void showLoading() {
if (dialog != null && dialog.isShowing()) return;
dialog = new ProgressDialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(false);
dialog.setProgr
4000
essStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage("请求网络中...");
dialog.show();
}
public void dismissLoading() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
这是baseactivity的代码,之后写basedetail继承baseactivity这是basedetail实现的代码
protected ActionBar actionBar;
/* protected TextView requestState;
protected TextView requestHeaders;
protected TextView responseData;
protected TextView responseHeader;*/
protected FrameLayout rootContent;
Toolbar toolbar;
TextView title_name;
/*是否第一次加载返回*/
private boolean title_back_first = true;
/*是否是返回(有可能是代表别的功能)*/
private boolean is_title_back = true;
ImageView title_back;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
}
getDelegate().setContentView(R.layout.activity_base);
Window window = getWindow();
rootContent = (FrameLayout) window.findViewById(R.id.content);
toolbar = (Toolbar) window.findViewById(R.id.toolbar);
title_name = (TextView) window.findViewById(R.id.title_name);
title_back = (ImageView) window.findViewById(R.id.title_back);
textView = (TextView) window.findViewById(R.id.title_rightTv);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
onActivityCreate(savedInstanceState);
}
最后继承basedetailactivity
/**
* 设置title
*
* @param title :title
*/
protected void setTitleName(String title) {
title_name.setText(title);
}
/**
* 设置返回
*
* @param back :是否返回:是-->返回,不是则设置其他图标
* @param resourcesId :图标id,返回时随意设置,不使用
*/
protected void setTitleBack(final boolean back, int resourcesId) {
is_title_back = back;
if (title_back_first || title_back == null) {
title_back.setOnClickListener(this);
title_back_first = false;
}
title_back.setVisibility(View.VISIBLE);
if (!back) {
title_back.setImageResource(resourcesId);
}
}
/**
* title右侧文字
*
* @param str :文字内容
*/
protected void setTitleRightText(String str) {
textView.setVisibility(View.VISIBLE);
textView.setText(str);
textView.setOnClickListener(this);
}
protected abstract void onActivityCreate(Bundle savedInstanceState);
@Override
public void setTitle(CharSequence title) {
if (actionBar != null) actionBar.setTitle(title);
}
@Override
public void setTitle(int titleId) {
if (actionBar != null) actionBar.setTitle(titleId);
}
@Override
public View findViewById(int id) {
return rootContent.findViewById(id);
}
private void clearContentView() {
rootContent.removeAllViews();
}
@Override
public void setContentView(int layoutResID) {
clearContentView();
getLayoutInflater().inflate(layoutResID, rootContent, true);
}
@Override
public void setContentView(View view) {
clearContentView();
rootContent.addView(view);
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
clearContentView();
rootContent.addView(view, params);
}
public class MyToolBarActivity extends BaseDetailActivity {
// setContentView(R.layout.activity_toolbar);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toolbar);
setTitleName("adsklfj");//title
setTitleBack(false,R.mipmap.ic_back);//有图标,但不是返回
setTitleBack(true, 0);//返回
setTitleRightText("保存");//右侧文字
}
@Override
protected void onActivityCreate(Bundle savedInstanceState) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.title_back:
Toast.makeText(this, "点击了返回按钮", Toast.LENGTH_SHORT).show();
break;
case R.id.title_rightTv:
Toast.makeText(this, "点击了右键", Toast.LENGTH_SHORT).show();
break;
}
}
github地址:https://github.com/yuanchongzhang/MyDefineToolBar 欢迎star
@SuppressWarnings("unchecked")
public <T extends View> T findView(int id) {
return (T) findViewById(id);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSystemBarTint();
}
/** 子类可以重写改变状态栏颜色 */
protected int setStatusBarColor() {
return getColorPrimary();
}
/** 子类可以重写决定是否使用透明状态栏 */
protected boolean translucentStatusBar() {
return false;
}
/** 设置状态栏颜色 */
protected void initSystemBarTint() {
Window window = getWindow();
if (translucentStatusBar()) {
// 设置状态栏全透明
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
return;
}
// 沉浸式状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//5.0以上使用原生方法
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(setStatusBarColor());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//4.4-5.0使用三方工具类
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
/* SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintColor(setStatusBarColor());*/
}
}
/** 获取主题色 */
public int getColorPrimary() {
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
return typedValue.data;
}
/** 获取深主题色 */
public int getDarkColorPrimary() {
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValue, true);
return typedValue.data;
}
/** 初始化 Toolbar */
public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, String title) {
toolbar.setTitle(title);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(homeAsUpEnabled);
}
public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, int resTitle) {
initToolBar(toolbar, homeAsUpEnabled, getString(resTitle));
}
public void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
private ProgressDialog dialog;
public void showLoading() {
if (dialog != null && dialog.isShowing()) return;
dialog = new ProgressDialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(false);
dialog.setProgr
4000
essStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage("请求网络中...");
dialog.show();
}
public void dismissLoading() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
这是baseactivity的代码,之后写basedetail继承baseactivity这是basedetail实现的代码
protected ActionBar actionBar;
/* protected TextView requestState;
protected TextView requestHeaders;
protected TextView responseData;
protected TextView responseHeader;*/
protected FrameLayout rootContent;
Toolbar toolbar;
TextView title_name;
/*是否第一次加载返回*/
private boolean title_back_first = true;
/*是否是返回(有可能是代表别的功能)*/
private boolean is_title_back = true;
ImageView title_back;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
}
getDelegate().setContentView(R.layout.activity_base);
Window window = getWindow();
rootContent = (FrameLayout) window.findViewById(R.id.content);
toolbar = (Toolbar) window.findViewById(R.id.toolbar);
title_name = (TextView) window.findViewById(R.id.title_name);
title_back = (ImageView) window.findViewById(R.id.title_back);
textView = (TextView) window.findViewById(R.id.title_rightTv);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
onActivityCreate(savedInstanceState);
}
最后继承basedetailactivity
/**
* 设置title
*
* @param title :title
*/
protected void setTitleName(String title) {
title_name.setText(title);
}
/**
* 设置返回
*
* @param back :是否返回:是-->返回,不是则设置其他图标
* @param resourcesId :图标id,返回时随意设置,不使用
*/
protected void setTitleBack(final boolean back, int resourcesId) {
is_title_back = back;
if (title_back_first || title_back == null) {
title_back.setOnClickListener(this);
title_back_first = false;
}
title_back.setVisibility(View.VISIBLE);
if (!back) {
title_back.setImageResource(resourcesId);
}
}
/**
* title右侧文字
*
* @param str :文字内容
*/
protected void setTitleRightText(String str) {
textView.setVisibility(View.VISIBLE);
textView.setText(str);
textView.setOnClickListener(this);
}
protected abstract void onActivityCreate(Bundle savedInstanceState);
@Override
public void setTitle(CharSequence title) {
if (actionBar != null) actionBar.setTitle(title);
}
@Override
public void setTitle(int titleId) {
if (actionBar != null) actionBar.setTitle(titleId);
}
@Override
public View findViewById(int id) {
return rootContent.findViewById(id);
}
private void clearContentView() {
rootContent.removeAllViews();
}
@Override
public void setContentView(int layoutResID) {
clearContentView();
getLayoutInflater().inflate(layoutResID, rootContent, true);
}
@Override
public void setContentView(View view) {
clearContentView();
rootContent.addView(view);
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
clearContentView();
rootContent.addView(view, params);
}
public class MyToolBarActivity extends BaseDetailActivity {
// setContentView(R.layout.activity_toolbar);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toolbar);
setTitleName("adsklfj");//title
setTitleBack(false,R.mipmap.ic_back);//有图标,但不是返回
setTitleBack(true, 0);//返回
setTitleRightText("保存");//右侧文字
}
@Override
protected void onActivityCreate(Bundle savedInstanceState) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.title_back:
Toast.makeText(this, "点击了返回按钮", Toast.LENGTH_SHORT).show();
break;
case R.id.title_rightTv:
Toast.makeText(this, "点击了右键", Toast.LENGTH_SHORT).show();
break;
}
}
相关文章推荐
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 封装一个BaseActivity并实现沉浸式状态栏
- BaseActivity中封装通用的Toolbar
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 自己封装的BaseActivity和BaseFragment 可以实现基本的功能,后期会不断根据需求加api
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- BaseActivity的toolbar的封装
- 我一行代码都不写实现Toolbar!你却还在封装BaseActivity?
- IP层的封装(Java的InetAddress类的C++实现)
- 近期在制作QSocket类,实现对Linux、unix 下的Socket的封装
- .Net/C# 封装磁盘目录文件搜索功能的工具类 (实现了与搜索相关的事件,以便插入客户处理代码)
- (八)线程--借助 封装类 实现“线程调用带参方法”(示例下载)
- VB:如何实现在代码中弹出toolbar的ButtonMenu