1、创建自定义的属性:
2、在自定义的布局中获取属性;
3、在mainActivity中使用 自定义控件,并使用自定义属性赋值。

1、创建自定义的属性创建

values/attr.xml 文件;

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="Topbar"><attr name="title" format="string"/><attr name="title_color" format="color"/><attr name="title_size" format="dimension"/><attr name="btn_height" format="dimension"/><attr name="btn_margin" format="dimension"/><attr name="btn_vertical_margin" format="dimension"/><attr name="btn_horizontal_margin" format="dimension"/><attr name="right_text" format="string"/><attr name="left_text" format="string"/><attr name="right_background" format="reference|color"/><attr name="left_background" format="reference|color"/></declare-styleable>
</resources>

2、在自定义的布局中获取属性;

package com.sjzs.customui.ui;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;import com.sjzs.customui.R;/*** Created by yy520 on 2018-3-24.*/public class TitleBar extends RelativeLayout{private Button leftButton,rightButton;private TextView titleText;private LayoutParams leftParams,rightParams,titleParams;private String title;private int titleColor;private float titleSize;private int btnMargin,btn_v_margin,btn_h_margin;private int btn_height;private String rightText;private String leftText;private Drawable rightBackground;private Drawable leftBackground;public void setRightOnClickListener(OnClickListener onClickListener){rightButton.setOnClickListener(onClickListener);}public void setLeftOnClickListener(OnClickListener onClickListener){leftButton.setOnClickListener(onClickListener);}public TitleBar(Context context, AttributeSet attrs) {super(context, attrs);TypedArray ta = context.obtainStyledAttributes(attrs,  R.styleable.Topbar);title = ta.getString(R.styleable.Topbar_title);titleColor = ta.getColor(R.styleable.Topbar_title_color,0);titleSize = ta.getDimension(R.styleable.Topbar_title_size,0);btnMargin = (int) ta.getDimension(R.styleable.Topbar_btn_margin,0);btn_v_margin = (int) ta.getDimension(R.styleable.Topbar_btn_vertical_margin,0);btn_h_margin = (int) ta.getDimension(R.styleable.Topbar_btn_horizontal_margin,0);btn_height = (int) ta.getDimension(R.styleable.Topbar_btn_height,0);rightText = ta.getString(R.styleable.Topbar_right_text);leftText = ta.getString(R.styleable.Topbar_left_text);rightBackground = ta.getDrawable(R.styleable.Topbar_right_background);leftBackground = ta.getDrawable(R.styleable.Topbar_left_background);btn_v_margin = (int) ta.getDimension(R.styleable.Topbar_btn_vertical_margin,0);btn_h_margin = (int) ta.getDimension(R.styleable.Topbar_btn_horizontal_margin,0);ta.recycle();//回收资源,防止内存泄漏leftButton = new Button(context);rightButton = new Button(context);titleText = new TextView(context);leftButton.setText(leftText);leftButton.setTextColor(titleColor);leftButton.setBackground(leftBackground);leftButton.setPadding(10,0,10,0);rightButton.setText(rightText);rightButton.setTextColor(titleColor);rightButton.setBackground(rightBackground);rightButton.setPadding(10,0,10,0);titleText.setText(title);titleText.setTextColor(titleColor);titleText.setTextSize(titleSize);titleText.setGravity(Gravity.CENTER);if(btn_v_margin == 0){btn_v_margin = btnMargin;}if(btn_h_margin == 0){btn_h_margin = btnMargin;}leftParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);leftParams.setMargins(btn_h_margin,btn_v_margin,0,btn_v_margin);//设置button高度,Android 默认高度太高。if(btn_height!=0)leftParams.height = btn_height;addView(leftButton,leftParams);rightParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);rightParams.setMargins(0,btn_v_margin,btn_h_margin,btn_v_margin);if(btn_height!=0)rightParams.height = btn_height;addView(rightButton,rightParams);titleParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);addView(titleText,titleParams);}
}

3、在mainActivity布局中使用 自定义控件,并使用自定义属性赋值。

Activity:

public class MainActivity extends AppCompatActivity {private Context context = this;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {TitleBar view = (TitleBar) findViewById(R.id.title_bar);view.setRightOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context,"Right",Toast.LENGTH_LONG).show();}});view.setLeftOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context,"Left",Toast.LENGTH_LONG).show();}});}
}

Layout

<?xml version="1.0" encoding="utf-8"?>
<!-- xmlns:app="http://schemas.android.com/apk/res-auto" 自定义属性名称空间,没有它自定义属性会报错-->
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.sjzs.customui.MainActivity"><com.sjzs.customui.ui.TitleBarandroid:id="@+id/title_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/colorGreen"app:title = "标题"app:title_color = "#FFFFFF"app:title_size = "7dp"app:right_text = "返回"app:left_text = "菜单"app:btn_height = "30dp"app:btn_horizontal_margin = "15dp"app:btn_vertical_margin = "10dp"app:left_background = "@drawable/button_bg_frame"app:right_background = "@drawable/button_bg_frame"></com.sjzs.customui.ui.TitleBar>
</android.support.constraint.ConstraintLayout>

其他属性:
color;

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorGreen">#9CCB39</color><color name="white">#FFFFFF</color>
</resources>

按钮背景:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><stroke
        android:width="1dp"android:color="@color/white"/><solid android:color="@color/colorGreen"></solid><corners android:radius="3dp" />
</shape>

Android 自定义titlebar控件(自定义UI控件)相关推荐

  1. Flutter 自定义UI控件并设置交互能力

    1.自定义UI控件 首先UI控件按照是否能够与用户交互分为交互型控件和非交互型控件. 下面就是创建了一个交互型控件,只是关于界面是空的,如果我们继承StatelessWidget就是创建了一个非交互型 ...

  2. android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...

    本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法. 背景技术: 目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一.传 ...

  3. 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    博客地址 : http://blog.csdn.net/shulianghan/article/details/50051499 ; 一. UI 控件简介 1. UI 控件分类 UI 控件分类 : 活 ...

  4. JavaFX UI控件教程(二)之JavaFX UI控件

    翻译自  JavaFX UI控件 本章概述了通过API提供的JavaFX UI控件. JavaFX UI控件是使用场景图中的节点构建的.因此,控件可以使用JavaFX平台的视觉丰富功能.由于JavaF ...

  5. c#,c++,qt中多线程访问UI控件线程的问题汇总

    c#和MFC中可以创建UI控件及模态/非模态对话框,Qt中只能在主UI线程中创建访问UI控件. c#和MFC中可以通过全局变量或指针句柄等方式在工作线程中访问其他UI线程控件,其中c#需要Invoke ...

  6. 安卓开发入门教程-UI控件_EditText

    什么是EditText EditText是用于进行文本输入的UI控件. 基础样例 1.普通输入 效果图 代码 <EditTextandroid:layout_width="wrap_c ...

  7. android高德地图上加自定义菜单,自定义UI控件-UI界面定制-开发指南-Android 导航SDK | 高德地图API...

    关于自定义 UI 布局,您还可以参考官方Demo--完全自定义UI导航. 单元素自定义 可以通过AMapNaviViewOptions中如下接口进行单UI元素显示隐藏,只列出部分接口,更多功能请参考A ...

  8. Android自定义ViewGroup实现朋友圈九宫格控件

    在我们的实际应用中,经常需要用到自定义控件,比如自定义圆形头像,自定义计步器等等,这篇文章主要给大家介绍了关于Android自定义ViewGroup实现朋友圈九宫格控件的相关资料,需要的朋友可以参考下 ...

  9. QT-子线程或自定义类操作访问主界面UI控件的几种方法

    前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...

  10. JavaFX UI控件教程(二十八)之UI控件的自定义

    翻译自  Customization of UI Controls 本章介绍了UI控件自定义的各个方面,并总结了Oracle提供的一些提示和技巧,以帮助您修改UI控件的外观和行为. 您可以通过应用层叠 ...

最新文章

  1. Vue+element UI实现“回到顶部”按钮组件
  2. ios4 向 ios5 迁移短信的方式
  3. 本土化App名稱和icon
  4. mysql5.7数据恢复_mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解
  5. Shiro 编码/加密
  6. 使用GridView做出列选择效果(获取动态生成的控件.鼠标点选GridView.Ajax控件)
  7. 【设计】线框图、原型和视觉稿的区别
  8. 打开c盘_为什么你的C盘总是爆满?教你彻底清理C盘空间,瞬间提速50%
  9. php 5.6.21连接mysql_IIS 7.5 + PHP-5.6.3 + mysql-5.6.21.1
  10. GdiPlus[33]: 基本绘图与填充命令
  11. Firebug下载地址及安装方法
  12. 获取115网盘文件列表
  13. 负载均衡性能参数如何测评?
  14. OO包设计原则遵循度自动分析检查工具JDM简介(原创)
  15. BOM_创建更新物料清单脚本
  16. 学生用什么台灯对眼睛最好呢?一起来看看选哪些护眼灯吧
  17. Core Data 教程:多托管对象上下文
  18. [博弈] LOJ#2471. 「九省联考 2018」一双木棋
  19. httpd.exe: Syntax error on line 40 of */apache/conf/httpd.conf: ServerRoot must be a valid directory
  20. 云数据中心与传统数据中心

热门文章

  1. 博士第六年还没有发 Paper 是一种什么样的体验?| 文末送书
  2. python安装库失败cannot determine archive_python - 私有Github python repo无法安装 - 堆栈内存溢出...
  3. 外媒中国量子计算机,比美国快100亿倍,中国量子计算机赢得霸权!外媒致敬
  4. 港科夜闻|香港特别行政区候任行政长官李家超先生于6月6日上午会见香港科大(广州)倪明选校长一行...
  5. 简单做好游戏中“攻击动作”的3个窍门
  6. CTPAT认证辅导,外国制造商必须确保商业伙伴遵照C-TPAT安全标准制定安全程序和规程
  7. 百胜中国门店数突破一万家;山姆中国第28家门店在昆山开业 | 美通企业日报...
  8. VC基于HOOPS开发3D浏览器
  9. 联想G50 BIOS找不到USB HDD启动项(没有硬盘启动项)
  10. 黑客是怎样攻击你的网站的