如何自定义TopBar和属性封装
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"如何自定义TopBar和属性封装",在日常操作中,相信很多人在如何自定义TopBar和属性封装问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何自定义
千家信息网最后更新 2026年11月01日如何自定义TopBar和属性封装
这篇文章主要介绍"如何自定义TopBar和属性封装",在日常操作中,相信很多人在如何自定义TopBar和属性封装问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何自定义TopBar和属性封装"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
前言
在实际工作中,当我们接到boss要做一个如下界面时
也许会有很多这样共同的界面,当然我们每个界面都写一个这样的Topbar,也是可以实现统一的效果,但是要修改的时候,那我们岂不是要废掉(what?) 我们我要写自定义基础的View封装起来使用,这样在修改的时候,我们就会省很多事。
那么我们就开始我们自己的View封装
第一步 定义自己的属性,在values文件夹中创建attrs.xml文件内容如下:
第二步 我们自定义属于我们自己的View
/** * @author :huangxianfeng on 2017/3/14. * 第二步:创建自己的View * 自定义自己的View,TopBar的模板,不能在每个界面都修改此界面 */public class Topbar extends RelativeLayout { private Button leftButton,rightButton; private TextView tvTitle; private int leftTextColor; private Drawable leftBackground; private String leftText; private int rightTextColor; private Drawable rightBackground; private String rightText; private float titleTextSize; private int titleTextColor; private String title; private LayoutParams leftParams,rightParams,titleParams; private topbarClickListener listener; /** * 创建一个空外部调用的接口 */ public interface topbarClickListener{ public void leftClick(); public void rightClick(); } public void setOnTopbarClickListener(topbarClickListener listener){ this.listener = listener; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public Topbar(final Context context, AttributeSet attrs) { super(context, attrs); //包含了自己所有的自定义的属性 TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.Topbar); //从属性中提取自定义的属性 leftTextColor = ta.getColor(R.styleable.Topbar_leftTextColor, 0); leftBackground = ta.getDrawable(R.styleable.Topbar_leftBackground); leftText = ta.getString(R.styleable.Topbar_leftText); rightTextColor = ta.getColor(R.styleable.Topbar_rightTextColor, 0); rightBackground = ta.getDrawable(R.styleable.Topbar_rightBackground); rightText = ta.getString(R.styleable.Topbar_rightText); titleTextSize = ta.getDimension(R.styleable.Topbar_titleTextSize, 0); titleTextColor = ta.getColor(R.styleable.Topbar_titleNameTextColor, 0); title = ta.getString(R.styleable.Topbar_titleName); ta.recycle();//进行回收 //创建自定义的控件 leftButton = new Button(context); rightButton = new Button(context); tvTitle = new TextView(context); //设置属性 leftButton.setTextColor(leftTextColor); leftButton.setBackground(leftBackground); leftButton.setText(leftText); rightButton.setTextColor(rightTextColor); rightButton.setBackground(rightBackground); rightButton.setText(rightText); tvTitle.setTextColor(titleTextColor); tvTitle.setTextSize(titleTextSize); tvTitle.setText(title); tvTitle.setGravity(Gravity.CENTER); setBackgroundColor(0xFFF59563); leftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);//增加一个规则,让控件左边显示 addView(leftButton, leftParams);//此时完成一个View控件的添加,添加到ViewGroup中去了 rightParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);//增加一个规则,让控件右边显示 addView(rightButton, rightParams);//此时完成一个View控件的添加,添加到ViewGroup中去了 titleParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); titleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);//增加一个规则,让控件居中显示 addView(tvTitle, titleParams);//此时完成一个View控件的添加,添加到ViewGroup中去了 leftButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //我们这边只进行调用这边的暴露的方法即可 listener.leftClick(); } }); rightButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.rightClick(); } }); } /** * 设置左边按钮是否显示 * @param flag */ public void setLeftIsvisable(boolean flag){ if (flag){ leftButton.setVisibility(View.VISIBLE); }else{ leftButton.setVisibility(View.GONE); } } /** * 设置右边按钮是否显示 * @param flag */ public void setRightIsvisable(boolean flag){ if (flag){ rightButton.setVisibility(View.VISIBLE); }else{ rightButton.setVisibility(View.GONE); } }}此View很简单,只是一些简单的功能实现,有自己想要添加的方法,都可以自行更改。
第三步 如何使用我们以上的内容呢?其实简单,只要在我们activity_main.xml布局添加即可
//在添加自己的自定义属性的时候,要先加入一个xmln:custom="http://schemas.android.com/apk/res-auto" //以便来引用自己的属性,以下scustom就是引用的自己的属性
在上面代码中,有custom这个包的依赖是为什么呢?其实就是自定义的属性依赖名称,为了和android区分开来,但是要在最外层父布局中添加
xmlns:custom="http://schemas.android.com/apk/res-auto"
来依赖属性类别。
第四步 就可以在我们MainActivity中使用我们的Topbar了
public class MainActivity extends AppCompatActivity { private Topbar mTopbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); } private void initUI() { mTopbar = (Topbar)findViewById(R.id.topbar); mTopbar.setOnTopbarClickListener(new Topbar.topbarClickListener() { @Override public void leftClick() { Toast.makeText(MainActivity.this,"leftClick",Toast.LENGTH_SHORT).show(); } @Override public void rightClick() { Toast.makeText(MainActivity.this,"rightClick",Toast.LENGTH_SHORT).show(); } }); mTopbar.setLeftIsvisable(true); }}到此,关于"如何自定义TopBar和属性封装"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
属性
控件
封装
界面
学习
方法
时候
规则
内容
右边
就是
布局
按钮
文件
更多
帮助
实用
接下来
从属性
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海挚品互联网科技有限公司
华服互联网科技靠谱吗
天津市摩尔互联网科技
北京路客互联网科技有限公司
重生之互联网科技帝国
美国互联网保险保险科技
河南真二互联网科技有限公司
港股互联网科技股
金融科技 互联网金融
电子科技大学互联网
互联网养老 桔豆科技
佩信高科技互联网
太原新华互联网科技学校怎么样
互联网科技博主是什么意思
互联网金融科技公司干啥的
本届互联网博览会上的黑科技
启辰互联网科技
互联网科技包装股份有限公司上市
中国科技和美国互联网
互联网金融金融科技
互联网科技工作委员会毛军
互联网中国科技
互联网科技媒体
互联网科技的英文
奔汉互联网科技
长亮科技互联网金融
互联网科技公司的市场部门
互联网科技与管理
链环科技传统企业怎么转型互联网
世界互联网科技成果奖