博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之——自定义标题栏titlebar
阅读量:4052 次
发布时间:2019-05-25

本文共 6848 字,大约阅读时间需要 22 分钟。

     本文通过实例介绍一种titlebar的实现方法。

1、activity_main layout 配置文件

——此处对应的是MainActivity路径
—此处为设置中间标题的属性  
2、MyToolBar数据处理,包括标题栏的按钮是否显示、按钮的点击事件 package com.my.joe.myneusoft;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Color;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.view.Gravity;import android.view.View;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.TextView;/* * 自定义ToolBar,继承自RelativeLayout **/public class MyToolBar extends RelativeLayout { private Button leftBtn, rightBtn; // 左侧和右侧的按钮 private TextView tvTitle; // 中间的标题 /* * 中间标题的属性 */ private String title; // 标题 private boolean showTitle; // 是否显示标题 private float titleSize; // 标题字体大小 private int titleColor; // 标题字体颜色 /* * 左边按钮的属性 */ private String leftBtnText;// 左边按钮的文字 private Drawable leftBtnBackground;// 左边按钮的背景 private boolean showLeftBtn;// 是否显示左边按钮 private int leftBtnTextColor;// 左边按钮字体颜色 private float leftBtnTextSize;// 左边按钮字体大小 /* * 右边按钮的属性 */ private String rightBtnText;// 右边按钮的文字 private Drawable rightBtnBackground;// 右边按钮的背景 private boolean showRightBtn;// 是否显示右边按钮 private int rightBtnTextColor;// 右边按钮字体颜色 private float rightBtnTextSize;// 右边按钮字体大小 /* * 三个控件的位置配置参数,左侧、右侧按钮的位置 */ private LayoutParams titleParams;// 标题的位置配置参数 private LayoutParams leftParams;// 左边按钮的位置配置参数 private LayoutParams rightParams;// 右边按钮的位置配置参数 // 事件监听器 private MyToolBarClickListener listener; /* * 在构造函数里完成自定义toolbar的属性设置 */ public MyToolBar(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyToolBar); /* * 获取中间标题的自定义属性设置以及默认值 */ title = typedArray.getString(R.styleable.MyToolBar_textTitle); showTitle = typedArray.getBoolean(R.styleable.MyToolBar_showTitle, true); titleSize = typedArray.getDimension(R.styleable.MyToolBar_titleTextSize, 0); titleColor = typedArray.getColor(R.styleable.MyToolBar_titleTextColor, 0); /* * 获取左边按钮的自定义属性设置以及默认值 */ leftBtnText = typedArray.getString(R.styleable.MyToolBar_leftButtonText); leftBtnTextColor = typedArray.getColor(R.styleable.MyToolBar_leftButtonTextColor, 0); leftBtnBackground = typedArray.getDrawable(R.styleable.MyToolBar_leftButtonBackground); leftBtnTextSize = typedArray.getDimension(R.styleable.MyToolBar_leftButtonTextSize, 0); /* * 获取右边按钮的自定义属性设置以及默认值 */ rightBtnText = typedArray.getString(R.styleable.MyToolBar_rightButtonText); rightBtnTextColor = typedArray.getColor(R.styleable.MyToolBar_rightButtonTextColor, 0); rightBtnBackground = typedArray.getDrawable(R.styleable.MyToolBar_rightButtonBackground); rightBtnTextSize = typedArray.getDimension(R.styleable.MyToolBar_rightButtonTextSize, 0); // 回收资源 typedArray.recycle(); /* * 创建三个控件的对象 */ leftBtn = new Button(context); rightBtn = new Button(context); tvTitle = new TextView(context); /* * 设置标题的属性 */ tvTitle.setText(title); tvTitle.setTextColor(titleColor); tvTitle.setTextSize(titleSize); tvTitle.setGravity(Gravity.CENTER); /* * 设置左边按钮的属性 */ leftBtn.setText(leftBtnText); leftBtn.setTextColor(leftBtnTextColor); //leftBtn.setBackground(leftBtnBackground); leftBtn.setTextSize(leftBtnTextSize); /* * 设置右边按钮的属性 */ rightBtn.setText(rightBtnText); rightBtn.setTextColor(rightBtnTextColor); //rightBtn.setBackground(rightBtnBackground); rightBtn.setTextSize(rightBtnTextSize); // 设置自定义toolbar的背景色 setBackgroundColor(Color.WHITE); // 中间标题的位置参数 配置 titleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); titleParams.addRule(RelativeLayout.CENTER_IN_PARENT); // 向RelativeLayout中添加控件 addView(tvTitle, titleParams); // 左边按钮的位置参数 配置 leftParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // 向RelativeLayout中添加控件 addView(leftBtn, leftParams); // 右边按钮的位置参数 配置 rightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); // 向RelativeLayout中添加控件 addView(rightBtn, rightParams); /* * 左边按钮点击事件 */ leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.leftBtnClick(); } }); /* * 右边按钮点击事件 */ rightBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.rightBtnClick(); } }); } /* * 定义点击事件的接口 */ public interface MyToolBarClickListener { public void leftBtnClick();// 左边按钮点击事件 public void rightBtnClick();// 右边按钮点击事件 } /* * 自定义的toolbar的事件监听 */ public void setOnMyToolBarClickListener(MyToolBarClickListener listener) { this.listener = listener; } /* * 设置自定义toolbar的左右两边按钮的是否显示,默认连个按钮都是显示的 */ public void setToolBarBtnVisiable(boolean leftFalg, boolean rightFalg) { if (leftFalg && rightFalg) { leftBtn.setVisibility(View.VISIBLE); rightBtn.setVisibility(View.VISIBLE); } if (!leftFalg && !rightFalg) { leftBtn.setVisibility(View.GONE); rightBtn.setVisibility(View.GONE); } if (!leftFalg && rightFalg) { leftBtn.setVisibility(View.GONE); rightBtn.setVisibility(View.VISIBLE); } if (leftFalg && !rightFalg) { leftBtn.setVisibility(View.VISIBLE); rightBtn.setVisibility(View.GONE); } } /* * 设置自定义的toolbar是否显示标题,默认是有标题的 */ public void setToolBarTitleVisible(boolean flag) { if (flag) { tvTitle.setVisibility(View.VISIBLE); } else { tvTitle.setVisibility(View.GONE); } }} 3、MainActivity的具体实现,包括初始化视图、数据,以及添加事件的监听器 package com.my.joe.myneusoft;import com.my.joe.myneusoft.MyToolBar.MyToolBarClickListener;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class MainActivity extends Activity { private MyToolBar myToolBar;// 自定义toolbar @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化视图 initView(); // 初始化数据 initData(); // 事件监听 initListener(); } /* * 初始化视图 */ private void initView() { setContentView(R.layout.activity_main); myToolBar = (MyToolBar) findViewById(R.id.myToolBar); } /* * 初始化数据 */ private void initData() { // 设置左边右边的按钮是否显示 myToolBar.setToolBarBtnVisiable(true, true); // 设置是否显示中间标题,默认的是显示 myToolBar.setToolBarTitleVisible(true); } /* * 事件监听 */ private void initListener() { /* * toolbar的点击事件处理 */ myToolBar.setOnMyToolBarClickListener(new MyToolBarClickListener() { @Override public void rightBtnClick() {// 右边按钮点击事件 Toast.makeText(MainActivity.this, "菜单", Toast.LENGTH_SHORT).show(); } @Override public void leftBtnClick() {// 左边按钮点击事件 Toast.makeText(MainActivity.this, "返回", Toast.LENGTH_SHORT).show(); } }); }} 4、在Androidmainfest中需要添加内容,如下
经过以上的步骤,就可以实现自定义的标题栏,包括左侧按钮、中间标题、右侧按钮,以及按钮的点击事件。

转载地址:http://agcci.baihongyu.com/

你可能感兴趣的文章
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>