• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android组合控件Titlebar的定制过程

android组合控件Titlebar的定制过程

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android titlebar,android 去掉titlebar,android隐藏titlebar,titlebar,安卓titlebar等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android组合控件Titlebar的定制过程


前言:我相信”天生我才必有用”这句话,每个人都有他的作用,也许他的作用相对其他人来不是很明显,也许他的作用也就是取悦别人,但是请不要忘记,可以通过不断努力来发挥自己的作用,使自己的价值得到提升。

在平时的android开发中你是否遇到一个问题,那就是每次都要自己写一个布局,或者是引入一个布局但每次都要为了给布局中的控件初始化。对于这个问题,谷歌官方推出了ActionBar,以及随后的取代ActionBar的ToolBar来使我们的开发更加简单,如:使用ToolBar+DrawLayout就非常容易实现推酷app的那种菜单效果。这样的一个控件的出现极大地减少了程序员的负担,使得android开发越来越简单,相信以后将会有更多类似的好的控件的出现来简化我们app的开发,呵呵,满期待的~。

这篇文章将介绍一个自己组合的控件Titlebar来简化我们的开发,这个组合控件的实现是个体力活(无技术含量),所以先看一下要实现的效果,如果觉得闭着眼睛就能写出来的,可以直接跳到本篇文章结尾为我辛勤的劳动点个赞,哈哈。

效果图:

这里写图片描述 这里写图片描述

这里写图片描述 这里写图片描述

实现这个组合控件需要我们自定义属性,写一个类继承ViewGroup并在构造方法中用代码添加子View。所以,下面先自定义我们的属性。

1. 自定义属性

通过观察上面的效果图,我们发现我们共需要以下11个属性:

leftButtonText leftButtonTextColor leftButtonTextSize leftButtonImage:左侧按钮的图片 titleText titleColor titleSize rightButtonText rightButtonTextColor rightButtonTextSize rightButtonImage:右侧按钮的图片

各个属性的意思根据名称就知道是什么意思,所以,我们就在资源文件attrs.xml来定义我们的属性:


    
    
    
    

    
    
    

    
    
    
    

注意:

我们可以attrs.xml的节点下面直接定义我们的属性而不必在节点下面定义或引用,然后在布局文件中直接使用,但这种做法不推荐,因为将一些属性添加到一个属性集中便于管理和使用。如果自定义属性和系统属性重名的时候,如果我们要定义属性的类型和系统定义的一样,那么我们可以直接在节点中引用系统的属性,即添加一个节点但不要format属性;

2. 继承ViewGroup,完成控件的组合

?观察我们要实现的效果,发现使用ViewGroup的子类RelativeLayout可以很好和方便地完成。所以,新建一个类继承RelativeLayout,重写三个构造方法,在构造方法中先获取布局中自定义属性的值。

private void init(Context context,AttributeSet attrs) {
    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.Titlebar);
    mLeftButtonText = typedArray.getString(R.styleable.Titlebar_leftButtonText);
    mLeftButtonTextColor = typedArray.getColor(R.styleable.Titlebar_leftButtonTextColor, Color.GRAY);
    mLeftButtonSize = typedArray.getDimension(R.styleable.Titlebar_leftButtonTextSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()));
    mLeftButtonImage = typedArray.getDrawable(R.styleable.Titlebar_leftButtonImage);

    mTitleButtonText = typedArray.getString(R.styleable.Titlebar_titleText);
    mTitleButtonTextColor = typedArray.getColor(R.styleable.Titlebar_titleColor, Color.GRAY);
    mTitleButtonSize = typedArray.getDimension(R.styleable.Titlebar_titleSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()));

    mRightButtonText = typedArray.getString(R.styleable.Titlebar_rightButtonText);
    mRightButtonTextColor = typedArray.getColor(R.styleable.Titlebar_rightButtonTextColor, Color.GRAY);
    mRightButtonSize = typedArray.getDimension(R.styleable.Titlebar_rightButtonTextSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics()));
    mRightButtonImage = typedArray.getDrawable(R.styleable.Titlebar_rightButtonImage);

    typedArray.recycle();
}

这里使用完TypedArray这个资源后要记得回收资源,就像使用完数据库后要记得关闭连接和使用完IO流要记得关闭一样。

获取到了自定义属性的值,那么,我们还需要通过代码构建左侧按钮,中间标题,右侧按钮这三个控件:

private void initView(Context context) {
    if(mLeftButtonImage == null & mLeftButtonText != null){
        // 当用户没有设置左侧按钮图片并设置了左侧的按钮文本属性时--添加左侧文本按钮
        mLeftTextView = new TextView(context);
        mLeftTextView.setText(mLeftButtonText);
        mLeftTextView.setTextColor(mLeftButtonTextColor);
        mLeftTextView.setTextSize(mLeftButtonSize);
        RelativeLayout.LayoutParams leftParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        leftParams.addRule(RelativeLayout.CENTER_VERTICAL);
        addView(mLeftTextView, leftParams);
    }else if(mLeftButtonImage != null){
        // 添加左侧图片按钮
        RelativeLayout.LayoutParams leftParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        leftParams.addRule(RelativeLayout.CENTER_VERTICAL);
        mLeftButton = new ImageView(context);
        mLeftButton.setImageDrawable(mLeftButtonImage);
        addView(mLeftButton, leftParams);
    }

    if(mTitleButtonText!=null){
        // 添加中间标题
        TextView titleTextView = new TextView(context);
        titleTextView.setText(mTitleButtonText);
        titleTextView.setTextColor(mTitleButtonTextColor);
        titleTextView.setTextSize(mTitleButtonSize);
        RelativeLayout.LayoutParams titleTextViewParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        titleTextViewParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        addView(titleTextView,titleTextViewParams);
    }

    if(mRightButtonImage == null & mRightButtonText != null){
        // 当用户没有设置右侧按钮图片并设置了左侧的按钮文本属性时--添加右侧文本按钮
        mRightTextView = new TextView(context);
        mRightTextView.setText(mRightButtonText);
        mRightTextView.setTextColor(mRightButtonTextColor);
        mRightTextView.setTextSize(mRightButtonSize);
        RelativeLayout.LayoutParams rightParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        rightParams.addRule(RelativeLayout.CENTER_VERTICAL);
        addView(mRightTextView,rightParams);
    }else if(mRightButtonImage != null){
        // 添加右侧图片按钮
        RelativeLayout.LayoutParams rightParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        rightParams.addRule(RelativeLayout.CENTER_VERTICAL);
        mRightButton = new ImageView(context);
        mRightButton.setImageDrawable(mRightButtonImage);
        addView(mRightButton, rightParams);
    }
}

说明:由于左侧和右侧的按钮既可以使用文字也可以使用图片,所以,这里我使用了两个控件代表这两种情况,当用户设置了左侧按钮图片后就不会添加左侧按钮文本。

接下来我们还需要为左侧和右侧按钮添加事件监听,所以,我们先定义一个接口:

/**
 * 在button点击事件接口
 */
public interface OnButtonClickListener{
    void onLeftClick();
    void onRightClick();
}

设置按钮监听:




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • android组合控件Titlebar的定制过程

相关文章

  • 2017-05-26关于eclipse android 在manifest改app应用包名注意事项,androidmanifest
  • 2017-05-26Android学习笔记(28):三种选择器DatePicker_TimePicker_NumberPicker剖析
  • 2017-05-26Android代码优化小技巧,android代码小技巧
  • 2017-05-26Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效
  • 2017-10-21在Mac系统中 下载、安装AndroidStudio
  • 2017-05-26Android UI:ListView,androiduilistview
  • 2017-05-26Android蓝牙操作笔记,android蓝牙笔记
  • 2017-05-26初涉RxAndroid结合Glide实现多图片加载操作
  • 2017-05-26基于android-async-http的android服务,android-async-http
  • 2017-05-26Android入门(一),Android入门(

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • SQLite 在 Android 的应用,sqliteandroid应用
    • Fragment 重叠 遮盖问题,fragment遮盖
    • Android开发学习——画横线竖线,android横线
    • 组件RecyclerView的应用(一),组件recyclerview
    • 仿网易Tab分类排序控件实现,网易tab排序控件
    • android StringBuffer 和StringBuilder,androidstringbuffer
    • Android开发艺术探索学习笔记(十一),android艺术探索
    • Kotlin的Reified类型:怎样在函数内使用这一类型(KAD 14),kotlinreified
    • [Android]异常3-java.lang.NoClassDefFoundError: javax.activation.DataHandler,javax.activation
    • 硅谷社交15--群详情,硅谷社交15--

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有