标题栏封装
来源:互联网 发布:飞行员夹克搭配男 知乎 编辑:程序博客网 时间:2024/06/05 12:50
自定义title
public class Title extends LinearLayout { /** * 上下文 */ private Context mContext; /** * 左侧按钮 */ private ImageButton mLeftBtn; /** * 左侧文字 */ private TextView mLeftTxt; /** * 左侧布局 */ private LinearLayout mLeftLayout; /** * 标题 */ private TextView mTitleTv; /** * 右侧文字 */ private TextView mRightText; /** * 右侧按钮 */ private ImageView mRightImg; /** * 右侧布局 */ private LinearLayout mRightLayout; /** * 标题栏点击事件 */ private OnTitleBarClickListener mTitleBarClickListener; /** * 构造标题栏 */ public Title(Context context) { super(context); mContext = context; init(); } /** * 初始化 */ private void init() { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View contentView = null; contentView = inflater.inflate(R.layout.view_title_bar, this); mLeftBtn = contentView.findViewById(R.id.btn_left); mLeftLayout = (LinearLayout) contentView.findViewById(R.id.li_left_btn); mTitleTv = (TextView) contentView.findViewById(R.id.tv_title); mRightLayout = (LinearLayout) contentView.findViewById(R.id.li_right_layout); mRightText = (TextView) contentView.findViewById(R.id.tv_right_btn); mLeftTxt = (TextView) contentView.findViewById(R.id.tv_left_txt); mRightImg = (ImageView) contentView.findViewById(R.id.tv_right_img); /** * 左侧布局点击事件 * */ mLeftLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mTitleBarClickListener.leftBtnClick(arg0); } }); /** * 右侧布局点击事件 * */ mRightLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mTitleBarClickListener.rightBtnClick(v); } }); } /** * 设置右边布局是否可见 */ public void setRightButtonVisibility(boolean isShow) { if (isShow) { mRightLayout.setVisibility(View.VISIBLE); } else { mRightLayout.setVisibility(View.GONE); } } /** * 设置右边图片的资源 */ public void setRightButtonDrawable(int nResId) { mRightText.setVisibility(View.GONE); mRightImg.setVisibility(View.VISIBLE); mRightImg.setBackgroundResource(nResId); } /** * 设置右边的文字 */ public void setRightText(String nText) { mRightText.setVisibility(View.VISIBLE); mRightText.setText(nText); mRightImg.setVisibility(View.GONE); } /** * 设置标题栏监听事件 */ public void setOnTitleBarClickListener( OnTitleBarClickListener titleBarClickListener) { this.mTitleBarClickListener = titleBarClickListener; } /** * 设置标题 */ public void setTitle(int resId) { mTitleTv.setText(mContext.getText(resId)); } /** * 设置标题 */ public void setTitle(String title) { mTitleTv.setText(title); } /** * 设置左边按钮图片资源 */ public void setLeftBtnBackground(int id) { mLeftTxt.setVisibility(GONE); mLeftBtn.setVisibility(VISIBLE); mLeftBtn.setBackgroundResource(id); } /** * 设置左边按钮文字 */ public void setLeftTxt(String str) { mLeftTxt.setVisibility(VISIBLE); mLeftBtn.setVisibility(GONE); mLeftTxt.setText(str); } /** * 设置左边布局不可见 */ public void setLeftLayoutVisibility(boolean isShow) { if (isShow) { mLeftLayout.setVisibility(View.VISIBLE); } else { mLeftLayout.setVisibility(View.GONE); } } /** * 按钮点击事件接口 */ public interface OnTitleBarClickListener { /** * TitleBar 左侧按钮\文字点击事件 */ void leftBtnClick(View arg0); /** * TitleBar 右侧按钮\文字点击事件 */ void rightBtnClick(View v); }}定义基类BaseActivity
public class BaseActivity extends Activity implements Title.OnTitleBarClickListener { /** * 沉浸状态栏占位view */ private View positionView; private Title mTitleBar; /** * 上下文 */ protected Context mContext; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; } @Override public void setContentView(@LayoutRes int layoutResID) { // 设置TopBar mTitleBar = new Title(this); mTitleBar.setVisibility(View.VISIBLE); mTitleBar.setOnTitleBarClickListener(this); ViewGroup localViewGroup = genRealRootView(); ViewGroup root = genRootView(); View paramView = getLayoutInflater().inflate(layoutResID, null); root.addView(this.mTitleBar, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); root.addView(paramView, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); localViewGroup.addView(root, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); localViewGroup.setBackgroundResource(R.color.white); // 1. 沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.TRANSPARENT); getWindow() .getDecorView() .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } else { getWindow() .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } positionView = mTitleBar.findViewById(R.id.position_view); dealStatusBar(); // 调整状态栏高度 super.setContentView(localViewGroup); } /** * 调整沉浸式菜单的title */ private void dealStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { int statusBarHeight = getStatusBarHeight(); ViewGroup.LayoutParams lp = positionView.getLayoutParams(); lp.height = statusBarHeight; positionView.setLayoutParams(lp); } } private int getStatusBarHeight() { Class<?> c = null; Object obj = null; Field field = null; int x = 0, statusBarHeight = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field.get(obj).toString()); statusBarHeight = getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return statusBarHeight; } public ViewGroup genRealRootView() { LinearLayout localLinearLayout = new LinearLayout(this); localLinearLayout.setOrientation(LinearLayout.VERTICAL); return localLinearLayout; } public ViewGroup genRootView() { LinearLayout localLinearLayout = new LinearLayout(this); localLinearLayout.setOrientation(LinearLayout.VERTICAL); return localLinearLayout; } /** * 设置标题栏文字资源 */ public void setTitle(int resId) { mTitleBar.setTitle(resId); } /** * 设置标题栏文字 */ protected void setTitle(String title) { mTitleBar.setTitle(title); } /** * 设置标题栏是否可见 */ protected void setTitleBarVisiable(boolean isShow) { if (isShow) { mTitleBar.setVisibility(View.VISIBLE); } else { mTitleBar.setVisibility(View.GONE); } } /** * 设置标题栏右侧是否可见 */ protected void setRightButtonVisibility(boolean isShow) { mTitleBar.setRightButtonVisibility(isShow); } /** * 设置标题栏左侧是否可见 */ protected void setLeftButtonVisibility(boolean isShow) { mTitleBar.setLeftLayoutVisibility(isShow); } /** * 设置右侧图片资源 */ protected void setRightButtonDrawable(int resId) { mTitleBar.setRightButtonDrawable(resId); } /** * 设置右侧按钮文字 */ protected void setRightButtonText(String text) { mTitleBar.setRightText(text); } /** * 设置左侧按钮文字 */ protected void setLeftButtonText(String text) { mTitleBar.setLeftTxt(text); } /** * 设置左边按钮图片资源 */ protected void setLeftButtonDrawable(int resId) { mTitleBar.setLeftBtnBackground(resId); } //页面跳转方法 protected void startActivity(Class<? extends Activity> cls) { startActivity(cls, null); } protected void startActivity(Class<? extends Activity> cls, Bundle bundle) { Intent intent = new Intent(mContext, cls); if (bundle != null) { intent.putExtras(bundle); } startActivity(intent); } protected void startActivityForResult(Class<? extends Activity> cls, Bundle bundle, int requestCode) { Intent localIntent = new Intent(); if (bundle != null) { localIntent.putExtras(bundle); } localIntent.setClass(this, cls); startActivityForResult(localIntent, requestCode); } //回调方法 protected void startActivityForResult(Class<? extends Activity> cls, int requestCode) { startActivityForResult(cls, null, requestCode); } @Override public void leftBtnClick(View v) { finish(); } @Override public void rightBtnClick(View v) { }}调用:
public class MainActivity extends BaseActivity { @Bind(R.id.title_bar) Button titleBar; @Bind(R.id.title_bar2) Button titleBar2; @Bind(R.id.title_bar3) Button titleBar3; @Bind(R.id.title_bar4) Button titleBar4; @Bind(R.id.title_bar5) Button titleBar5; @Bind(R.id.title_bar6) Button titleBar6; @Bind(R.id.title_bar7) Button titleBar7; @Bind(R.id.title_bar8) Button titleBar8; private boolean tle = false; private boolean leftbln = true; private boolean rightbln = true; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); ButterKnife.bind(this); } @OnClick({R.id.title_bar, R.id.title_bar2, R.id.title_bar3, R.id.title_bar4, R.id.title_bar5, R.id.title_bar6, R.id.title_bar7, R.id.title_bar8}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.title_bar: if (!tle) { tle = true; setTitleBarVisiable(false); } else { tle = false; setTitleBarVisiable(true); } break; case R.id.title_bar2: setLeftButtonDrawable(R.mipmap.ic_launcher); break; case R.id.title_bar3: setLeftButtonText("左侧文字"); break; case R.id.title_bar4: setRightButtonDrawable(R.mipmap.ic_launcher); break; case R.id.title_bar5: setRightButtonText("右侧按钮"); break; case R.id.title_bar6: setTitle("我是标题"); break; case R.id.title_bar7: if (leftbln) { leftbln = false; setLeftButtonVisibility(false); } else { leftbln = true; setLeftButtonVisibility(true); } break; case R.id.title_bar8: if (rightbln) { rightbln = false; setRightButtonVisibility(false); } else { rightbln = true; setRightButtonVisibility(true); } break; } } @Override public void leftBtnClick(View v) {// super.leftBtnClick(v); Toast.makeText(mContext, "点击了左侧", Toast.LENGTH_LONG).show(); } @Override public void rightBtnClick(View v) { Toast.makeText(mContext, "点击了右侧", Toast.LENGTH_LONG).show(); }}资源文件view_title_bar
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/title_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#F54337"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <View android:id="@+id/position_view" android:layout_width="1px" android:layout_height="1px" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp"> <LinearLayout android:id="@+id/li_left_btn" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/title_bar_lay_backgroud" android:orientation="horizontal" android:paddingLeft="16dp" android:paddingRight="16dp"> <ImageButton android:id="@+id/btn_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@mipmap/back" android:scaleType="fitXY" /> <TextView android:id="@+id/tv_left_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:scaleType="fitXY" android:text="按钮" android:textColor="#ffffff" android:textSize="16sp" android:visibility="gone" /> </LinearLayout> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="标题" android:textColor="#ffffff" android:textSize="18sp" /> <LinearLayout android:id="@+id/li_right_layout" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/title_bar_lay_backgroud" android:gravity="center" android:paddingLeft="16dp" android:paddingRight="16dp"> <TextView android:id="@+id/tv_right_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="完成" android:textColor="#ffffff" android:textSize="16sp" /> <ImageView android:id="@+id/tv_right_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:drawable/btn_plus" android:scaleType="fitXY" android:visibility="gone" /> </LinearLayout> </RelativeLayout> </LinearLayout></RelativeLayout>
效果图:
源码链接自定义titleBar
阅读全文
0 0
- 标题栏封装
- Android 封装标题栏
- Android标题栏的封装TitleBar
- Android封装一个自定义标题栏
- android开发中标题栏的封装
- Android 通用标题栏简单封装实现
- Android快速开发之封装标题栏
- BaseActivity中标题栏TitleBar的封装
- 安卓通用标题栏工具类的封装
- Android自定义控件之app标题栏的封装
- 封装Activity基类,快速实现添加标题栏,设置状态栏样式
- 标题栏
- 标题栏
- 标题栏
- 封装
- 封装
- 封装
- 封装
- java 代码 规范 类
- apache 两种模式
- 分页
- XMind大讲堂之——PPT的制作
- springMVC详解
- 标题栏封装
- 图解 Navicat for MySQL 快捷键
- JAVA——类和对象
- 把时间当作朋友——困境(笔记)
- spring boot 中手动加载配置文件
- C 输出当前时间的几种方式
- Android_Fragment+ViewPager滑动
- 协方差与相关系数
- Qt获取控件位置,坐标总结