打造一个属于自己的BaseActivity(沉浸状态栏,dialog,完全退出程序。应有尽有)
2017-01-12 11:27
423 查看
写这个之前,我先给我沉浸式状态栏的解决方案,我的BaseActivity就是基于这个的:
http://stormzhang.com/android/2015/08/16/boohee-toolbar/
我这里用的是Toolbar来实现自己的头部,下面是头部布局:
有人看到这个布局下面又是TextView又是ImageView的,就会疑惑,toobar不是可以直接设置标题跟图标么,为什么还要这些?
很简单,因为toobar的标题无法居中,所以我们还不如自己去设计一个,不是么?想放在那就放在那
之后就是设置toolbar_padding_top
dimens 下设置toolbar_padding_top values下设置为0dp,v19下设置为25dp。
下面就开始我的BaseActivity的编写了:
布局代码
activity代码:
这里,虽然我的BaseActivity 的封装已经结束了,但是里面还可以添加不少东西。
http://stormzhang.com/android/2015/08/16/boohee-toolbar/
话不多说,上代码
我想看了上面的解决方案应该就很简单就可以实现沉浸状态栏了,但是这里还是要贴出我的代码,因为有我自己的特色。我这里用的是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/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/app_title" android:minHeight="?attr/actionBarSize" android:paddingTop="@dimen/toolbar_padding_top" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <TextView android:id="@+id/tv_title" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="标 题" android:textColor="#ffffff" android:textSize="18sp" /> <ImageView android:id="@+id/iv_right_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginRight="16dp" android:visibility="gone" /> <TextView android:id="@+id/tv_count_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginRight="16dp" android:textColor="@color/colorWhite" android:textSize="14sp" android:visibility="gone" /> </android.support.v7.widget.Toolbar>
有人看到这个布局下面又是TextView又是ImageView的,就会疑惑,toobar不是可以直接设置标题跟图标么,为什么还要这些?
很简单,因为toobar的标题无法居中,所以我们还不如自己去设计一个,不是么?想放在那就放在那
之后就是设置toolbar_padding_top
dimens 下设置toolbar_padding_top values下设置为0dp,v19下设置为25dp。
下面就开始我的BaseActivity的编写了:
布局代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/toolbar_layout" /> </LinearLayout>
activity代码:
/** * Created by 5u51_5 on 2016/8/22. */ public abstract class BaseActivity extends AppCompatActivity { //一个专门用于装开启的Activity的集合,Activity栈 public static List<Activity> activities; private LinearLayout rootLayout; private ImageView ivRightIcon; private TextView tvTitle; private OnRightIconClick rightIconClick; private Toolbar toolbar; private OnLeftIconClick leftIconClick; private OnRightTextClick rightTextClick; private Dialog dialog; private Dialog tipDialog; private TextView tvCountDown; public BaseActivity() { //构造方法创建装Activity的list if (activities == null) { activities = new ArrayList<Activity>(); } } //重写onCreate @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 这句很关键,注意是调用父类的方法 super.setContentView(R.layout.activity_base); // 经测试在代码里直接声明透明状态栏更有效(设置状态栏透明) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes(); localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags); } activities.add(this); } @Override public void setContentView(int layoutId) { setContentView(View.inflate(this, layoutId, null)); } /** * 绑定view(用LinearLayout去add自己子activity的布局) * * @param view */ @Override public void setContentView(View view) { rootLayout = (LinearLayout) findViewById(R.id.root_layout); if (rootLayout == null) return; rootLayout.addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); initToolbar(); } /** * 初始化标题 * 由于toolbar的标题无法居中,而且有限制,所以设置标题为空字符串,自己配置标题样式 */ private void initToolbar() { toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(""); if (toolbar != null) { setSupportActionBar(toolbar); } } /** * 设置自己的标题 * * @param title */ public void setTitle(String title) { tvTitle = (TextView) findViewById(R.id.tv_title); tvTitle.setText(title); } /** * 设置头部颜色 * * @param color */ public void setHeadColor(int color) { toolbar.setBackgroundColor(color); } /** * 左侧图标 * * @param resId */ public void setLeftIcon(int resId) { toolbar.setNavigationIcon(resId); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (leftIconClick != null) { leftIconClick.leftIconClick(view); } } }); } /** * 右侧图标 * * @param resId */ public void setRightIcon(int resId) { ivRightIcon = (ImageView) findViewById(R.id.iv_right_icon); ivRightIcon.setVisibility(View.VISIBLE); ivRightIcon.setImageResource(resId); ivRightIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (rightIconClick != null) { rightIconClick.rightIconClick(view); } } }); } /** * 右侧文字 * * @param text */ public void setRightText(String text) { tvCountDown = (TextView) findViewById(R.id.tv_count_down); tvCountDown.setVisibility(View.VISIBLE); tvCountDown.setText(text); tvCountDown.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (rightTextClick != null) { rightTextClick.rightTextClick(view); } } }); } /** * 右侧文字显隐状态 * * @param gone */ public void setRightTextGone(boolean gone) { if (gone) { tvCountDown.setVisibility(View.GONE); } else { tvCountDown.setVisibility(View.VISIBLE); } } /** * 设置没有标题栏(全屏,状态栏透明) */ public void setToolbarGone() { toolbar.setVisibility(View.GONE); } /** * 右侧图标点击 * * @param rightIconClick */ public void setOnRightIconClick(OnRightIconClick rightIconClick) { this.rightIconClick = rightIconClick; } public interface OnRightIconClick { void rightIconClick(View view); } /** * 右侧文字点击 * * @param rightTextClick */ public void setOnRightTextClick(OnRightTextClick rightTextClick) { this.rightTextClick = rightTextClick; } public interface OnRightTextClick { void rightTextClick(View view); } public interface OnLeftIconClick { void leftIconClick(View view); } /** * 左侧图标点击 * * @param leftIconClick */ public void setOnLeftIconClick(OnLeftIconClick leftIconClick) { this.leftIconClick = leftIconClick; } //重写onDestory @Override protected void onDestroy() { activities.remove(this); Log.i("移出一个Activity", this.toString() + "个数:" + activities.size()); super.onDestroy(); } /** * 退出程序 */ public void finishAll() { for (Activity activity : activities) { activity.finish(); } } /** * 加载dialog (看需求配置) * * @param context * @param msg */ public void showLoadingDialog(Context context, String msg) { if (context != null) { dialog = new Dialog(context, R.style.dialog); View dialogView = LayoutInflater.from(context).inflate(R.layout.view_loading, null); TextView tvMsg = (TextView) dialogView.findViewById(R.id.tv_msg); tvMsg.setText(msg); dialog.setContentView(dialogView); Window dialogWindow = dialog.getWindow(); dialogWindow.setGravity(Gravity.CENTER); dialogWindow.setLayout(SizeUtils.dp2px(context, 260), LinearLayout.LayoutParams.WRAP_CONTENT); dialog.setCanceledOnTouchOutside(false); dialog.setCancelable(false); dialog.show(); } } public void closeLoadingDialog() { if (dialog.isShowing()) { dialog.dismiss(); } } public TextView getRightView() { if (tvCountDown == null) { tvCountDown = (TextView) findViewById(R.id.tv_count_down); } return tvCountDown; } public void closeTipDialog() { if (tipDialog.isShowing()) { tipDialog.dismiss(); } } /** * 提示弹窗 * * @param context * @param msg * @param sureText * @param cancelText * @param sureClickListener * @param cancleClickListener */ public void showTipDialog(Context context, String msg, String sureText, final String cancelText, final OnSureClickListener sureClickListener, final OnCancleClickListener cancleClickListener) { tipDialog = new Dialog(context, R.style.dialog); View dialogView = LayoutInflater.from(context).inflate(R.layout.view_tip_dialog, null); TextView tvMsg = (TextView) dialogView.findViewById(R.id.tv_msg); TextView tvSure = (TextView) dialogView.findViewById(R.id.tv_sure); TextView tvCancel = (TextView) dialogView.findViewById(R.id.tv_cancel); tvMsg.setText(msg); tvSure.setText(sureText); tvCancel.setText(cancelText); tvSure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { closeTipDialog(); if (sureClickListener != null) { sureClickListener.sureClick(view); } } }); tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { closeTipDialog(); if (cancleClickListener != null) { cancleClickListener.cancleClick(view); } } }); tipDialog.setContentView(dialogView); Window dialogWindow = tipDialog.getWindow(); dialogWindow.setGravity(Gravity.CENTER); dialogWindow.setLayout(SizeUtils.dp2px(getApplication(), 260), LinearLayout.LayoutParams.WRAP_CONTENT); tipDialog.show(); } /** * 界面跳转 * * @param activity 传入Activity.class */ public void moveToActivity(Class activity) { Intent intent = new Intent(this, activity); startActivity(intent); } public interface OnSureClickListener { void sureClick(View view); } public interface OnCancleClickListener { void cancleClick(View view); } }
这里,虽然我的BaseActivity 的封装已经结束了,但是里面还可以添加不少东西。
相关文章推荐
- android 在一个Activity中结束另一个Activity的方法(可以完全退出程序)
- Android完全退出程序,不是返回到上一个Activity
- 能不能在一个Activity中去finish销毁掉其他Activity ??(+程序完全退出)
- android 在一个Activity中结束另一个Activity的方法(可以完全退出程序)
- android 在一个Activity中结束另一个Activity的方法(可以完全退出程序)
- 广播的妙用-android程序完全退出,销毁所有activity方法
- activity完全退出程序
- android完全退出程序(android退出有多个activity的应用)
- 项目中的Activity统一管理 方便完全退出程序
- 笔记:安卓完全退出应用程序出现闪退、返回上一个activity的问题
- android完全退出程序(android退出有多个activity的应用)
- Android完全结束Activity并退出程序
- Android Activity 完全结束并退出程序的实例
- Android完全退出多个activity程序
- android完全退出程序(android退出有多个activity的应用)
- Android完全结束Activity并退出程序
- android多activity退出整个程序的一个实现
- Android应用开发多个activity完全退出程序方法
- android多activity退出整个程序的一个实现
- Android完全退出多个activity程序