android基础之自定义控件-topbar

androidStudio自定义简单topBar控件 当android 原生态控件无法满足我们的需求,我们就可以互建一个新的自定义的View来实现需要的功能。对于自定义的控件的分类,基本可以分为三类。 1> 自制控件,也称为自定义控件。通常继承于View或者ViewGroup的组件, 2>组合控件,就是利用系统已经存在的控件,组合到一起,实现一个符合需求的控件。 3>扩展控件,继承系统原有的组件,然后在此基础之上新添新的功能与逻辑,使其更加完善的控件。 效果图 继承RelativeLayout类,在此基础之上放置两个Button 阅读详情
说起自定义控件,其实见到了不少,就是缺少总结,下面我总价一个例子——Topbar。


想要自定义一个控件,我们可以模仿android系统是怎么定义的。


1.在values下创建attrs.xml文件,声明自定义的属性。
attrs.xml如下:


<?xml version="1.0" encoding="utf-8"?>
<resources>


    <declare-styleable name="Topbar">
        <attr name="title" format="string|reference" />
        <attr name="titleTextSize" format="dimension|reference" />
        <attr name="titleTextColor" format="color|reference" />
        
        <attr name="leftTextColor" format="color|reference" />
        <attr name="leftBackground" format="color|reference" />
        <attr name="leftText" format="string|reference" />
        
        <attr name="rightTextColor" format="color|reference" />
        <attr name="rightBackground" format="color|reference" />
        <attr name="rightText" format="string|reference" />
    </declare-styleable>


</resources>
name是我们自定义的属性名,format是指定它的值类型(reference是资源引用)


2.创建自定义控件的.java文件。
因为Topbar是一个布局,我让它继承自系统的RelativeLayout,模仿系统的控件的
    写法,在一个控件的.java文件,有构造函数,基本控件,与attrs.xml中自定义属性的映射变量,还有定义接口,
    利用接口回调机制实现动态事件(我理解的也不是很深,多做就理解啦)。
    Topbar.java如下:
//继承自RelativeLayout布局,布局模板!
public class Topbar extends RelativeLayout {
//三个基本控件
private Button mBtnLeft, mBtnRight;
private TextView mTvTitle;
//9个映射过来的属性变量
private int mLeftTextColor, mRightTextColor, mTitleTextColor;


private String mStrTitle, mStrLeftText, mStrRightText;


private float mTitleTextSize;


private Drawable mLeftBackground, mRightBackground;
//布局参数
private LayoutParams mLeftParams, mRightParams, mTitleParams;
//接口,回调机制的实现接口
private topbarClickListener listener;
//让调用者自己实现接口中的两个方法,在Topbar是指回调
public interface topbarClickListener {
void leftClick();


void rightClick();
}


public void setOnTopbarClickListener(topbarClickListener listener) {
this.listener = listener;
}


public Topbar(final Context c, AttributeSet attrs) {
super(c, attrs);
// 通过这个方法获取自定义的属性
TypedArray ta = c.obtainStyledAttributes(attrs, R.styleable.Topbar);
// android中是通过R.styleabl.控件名_属性来获取这个属性值
mLeftTextColor = ta.getColor(R.styleable.Topbar_leftTextColor, 0);
mLeftBackground = ta.getDrawable(R.styleable.Topbar_leftBackground);
mStrLeftText = ta.getString(R.styleable.Topbar_leftText);


mRightTextColor = ta.getColor(R.styleable.Topbar_rightTextColor, 0);
mRightBackground = ta.getDrawable(R.styleable.Topbar_rightBackground);
mStrRightText = ta.getString(R.styleable.Topbar_rightText);


mTitleTextColor = ta.getColor(R.styleable.Topbar_titleTextColor, 0);
mTitleTextSize = ta.getDimension(R.styleable.Topbar_titleTextSize, 0);
mStrTitle = ta.getString(R.styleable.Topbar_title);


// 回收资源
ta.recycle();


mBtnLeft = new Button(c);
mBtnRight = new Button(c);
mTvTitle = new TextView(c);


mBtnLeft.setTextColor(mLeftTextColor);
mBtnLeft.setBackground(mLeftBackground);
mBtnLeft.setText(mStrLeftText);


mBtnRight.setTextColor(mRightTextColor);
mBtnRight.setBackground(mRightBackground);
mBtnRight.setText(mStrRightText);


mTvTitle.setText(mStrTitle);
mTvTitle.setTextColor(mTitleTextColor);
mTvTitle.setTextSize(mTitleTextSize);
mTvTitle.setGravity(Gravity.CENTER);
// 设置Topbar的背景颜色
setBackgroundColor(0xFFF59563);


mLeftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
mLeftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);// 设置对齐方式
addView(mBtnLeft, mLeftParams);// 把mBtnLeft以mLeftParams的形式加入到Topbar中


mRightParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
mRightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
addView(mBtnRight, mRightParams);


mTitleParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
mTitleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
addView(mTvTitle, mTitleParams);


mBtnLeft.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
listener.leftClick();
}
});
mBtnRight.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
listener.rightClick();
}
});
}
//提供共有的方法给调用者使用
public void setLeftVisible(boolean flag) {
if (flag) {
mBtnLeft.setVisibility(View.VISIBLE);
} else {
mBtnLeft.setVisibility(View.INVISIBLE);
}
}
}
Android 自定义控件之简单自定义一个TopBar Android 自定义控件之简单自定义一个TopBar,AndroidStudio环境下做的 立即下载

相关推荐

Android UI模板设计---TopBar(标题栏)

简单实现了标题栏,并自定义功能,很容易理解,注释较详细

安卓(Android) 自定义控件 导航栏(TopBar)

作为一只安卓自学的小白,今天第一天发表微博还是有点小激动的,好了,废话少说下面开始我的安卓自定义控件知识总结。我的demo是一个自定义的TopBar,左边一个Button按钮,中间是一个标题,右边也是一个Button按钮。在安卓开发中自定义控件的技术是一个项目中不可缺少的一部分,下面我就用我的小demo一步步详细介绍,麻雀虽小五脏俱全,相信看完这篇文章对自定义控件肯定会有一个很好的掌握。首先来看一下

haoxl1994的博客 4501

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

Android自定义控件1:自定义topBar

自定义控件系列整合源码地址:https://github.com/gubaijin/custom-controls-and-result-set 目标效果::左右图片可以选择是否显示,左中右文字可以设值、大小、颜色,中间title可以实时更改。 组成:1、自定义属性:attrs.xml;2、自定义类:TopBar.class; 3、使用。 一:自定义属性attrs.xml:在res/valu

孤天浪雨 1391

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

m0_56779872的博客 8677

哈工大集合论与图论(下)慕课MOOC答案

答案选自2023哈工大集合论与图论慕课,慕课的题重复率很高并且具有极高的相似性,选答案时要格外注意对比选项,能力有限答案不一定面面俱到,整理不易读者且用且珍惜。

qq_34168477的博客 2903

Android--自定义控件解析(一)

1、前言自定义控件在我们的开发过程中占据了很大一部分,可以说如果你不会自定义控件,那么你就不是一个合格的Android工程师。要知道系统给我们提供的控件很可能在样式和效果上跟我们想要实现和呈现给用户的不相符合,这个时候如果你不会自定义控件,那么就只能茫然四顾啦。我的这篇博客并不是特指讲解某个控件的自定义,要介绍的是自定义控件的基础,如自定义控件的流程这样,更多的是一种编程模式,在我看来,无论是哪个控

HardWorkingAnt的博客 925

基于STM32与FPGA Cyclone IV的FSMC高速数据通信实战解析

本文详细解析了基于STM32的FSMC接口与FPGA Cyclone IV实现高速并行数据通信的实战方案。通过将FPGA模拟为SRAM设备,构建了MCU与FPGA之间的高速数据通道,并深入探讨了硬件连接、STM32软件配置、FPGA逻辑设计及性能优化等关键步骤,为图像处理、高速采集等需要大数据量交换的嵌入式应用提供了稳定高效的通信解决方案。

swift5iosmith的博客 294

android自定义控件(TopBar的实现)

很多时候,android提供的控件并不能满足实际开发的需要,而系统自然也提供了自定义控件的方法供开发者使用,下面就介绍一个简单的自定义控件TopBar(应用标题栏)的开发过程。 第一步:新建一个android项目 第二步:在res/values下新建一个attrs.xml的文件用来声明自定义控件的属性

Nemo_yang的专栏 961

openlayers全面教程306+【目录】

vue+openlayers系列教程旨在为开发者提供简单快捷的示例。在每一个示例中,解释相应的API知识点。

大剑师兰特的GIS世界 2万+

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 838

android 自定义Topbar

自定义控件 我们需要的步骤: *设计需要的属性 *实现VIew *引用VIew *完善功能 本文我们自定义一个Topbar的控件,需要实现有两个按钮,一个标题的控件。可参考企鹅的移动端界面Topbar(虽然没有那么高大上),具体为一个居左的返回键,一个居右菜单键,一个居中标题。 1,设计需要的属性 在valuse中新建一个名为atts的xml文件,然后将我们需要用到

wusai233的博客 527

面试真题集(十六):TensorRT基础

TensorRT面试真题解析:从模型优化到推理部署 本文精选了14道TensorRT面试题,涵盖选择题、简答题和场景题,深度考察推理工程师对TensorRT核心技术的理解。内容聚焦三个关键维度: 基础概念 FP16推理中Softmax层为何需保持FP32(数值稳定性) INT8校准原理(EntropyCalibrator2的鲁棒性优势) Plugin V3接口的构建/运行分离设计 性能优化 Conv-BN-ReLU融合减少40-60%延迟的关键机制(访存优化) 动态Shape配置策略(min/opt/max

PeterPan的博客 71

Android中自定义Topbar模板

1、Topbar模板功能介绍:自定义UI布局,自定义UI属性,自定义按钮监听事件,自定义左、右button的显示!效果图如下: 2、自定义属性:values——mytopbar.xml: [html] view plain copy xml version="1.0" encoding="

Zzq_Big_Cow的博客 951

基于Simulink的四足机器人楼梯攀爬仿真模型

构建一个基于Simulink的四足机器人楼梯攀爬仿真模型,旨在模拟四足机器人在面对楼梯等障碍时的运动控制和稳定性调整。以下是一个详细的步骤指南,帮助你从零开始创建这样一个仿真模型。

xiaoheshang_123的博客 247

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 自定义控件之TopBar

自定义控件学习之简单实现自己的TopBar     1,自定义TopBar 的属性       首先创建自己的attrs.xml ,自定义自己的属性            这里定义了title,lef

dhl_1986的博客 391

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

一个自定义的Topbar模板

1、Topbar模板功能介绍:自定义UI布局,自定义UI属性,自定义按钮监听事件,自定义左、右button的显示!效果图如下: 2、自定义属性:values——mytopbar.xml:

松狮 3673

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android自定义控件之TopBar

步骤:1.res-&gt;values目录下新建attrs.xml文件。             2.新建一个类继承自ViewGroup &lt;resources&gt; &lt;declare-styleable name="TopBar"&gt; &lt;attr name="title" format="string"/&gt; &

qq_27773675的博客 625

Android——自定义TopBar(ActionBar)

很多时候,我们不止一个Activity用到同样的布局,例如QQ的软件,上面的topbar动态,更多,联系人,添加,还有头像的图片。 这个没必要每次都要做布局中再写一遍,可以把这些做成一个控件,也就是自定义View。我们来看一下接下来要做的效果:点击后Button的效果:点击事件触发的事件:这些都是可以自己控制的。废话不多说,直接上手。需要这么几步:1、先要做values下面创建属性的xml。这里命名

Li_peilun的博客 2216

Android UI 模板设计——Topbar

新建一个java类,名为Topbar,让它继承RelativeLayout。如果是使用一般的置顶控件,不需要自定义属性的话,那么选择第一个方法即可,因为这里我们要自定义属性,所以选择第二个方法。首先我们需要定义三个控件。然后再声明我们之前自定义的那些属性。然后要对这些属性进行赋值,使控件和属性进行关联。

JluTiger316的博客 962

自定义view——TopBar

布局文件 &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f00"&gt;...

随心@的博客 481

自定义View-->实现顶部Topbar的简单UI模板

一、概述 这片博客主要是介绍通过自定义view的方式,实现一个在应用中经常使用的导航设计:Topbar,可以将其自定义为一个控件,通过xml文件的方式设置其各种属性,简化代码,提高工作效率。 如下图所示,是新浪微博的几个界面的截图,看红色方框内,每个界面都有这么一个Topbar导航栏设计。如果使用android系统给我们提供的控件,每一个界面都需要实现在RelativeL

Ceryool的博客 2844

自定义控件之-TopBar

一个项目中大部分的界面title一般都是风格相同的,本文介绍title的自定义模板。 1.首先是attrs.xml中声明自定义控件的属性 2.新建TopBar继承RelativeLayout,定义属性,和控件方法 3.在布局文件中摆放自定义控件 4.在代码中调用控件自定义方法 先看下效果图: 1.新建attrs.xml,目录:main/res/values/attrs.xml <?xm

iblade的博客 3069

创建自定义控件

开发环境:jdk 1.8 + adt-bundle-windows-x86_64_20140101 提取码: j24g 运行环境:mumu模拟器 使用:adb_server connect 127.0.0.1:7555 1. 基础知识 在《第一行代码》中,该章节有张图,如下: 所有的控件都是直接或者间接的继承自View; 所有的布局都是直接或者间接的继承自ViewGroup; View也是V...

梦否 553
上一篇: android之handler的总结
下一篇: java文件编码
_低头的麦穗
博客等级 码龄12年 4粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值