Android自定义控件(一)

原创 2013年12月02日 23:00:06

Android自定义控件(一)

一、自定义Button

①、定义button的选择器(一般放置于drawable文件夹下)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 获得焦点但未按下时的背景图片 -->
    <item android:drawable="@drawable/title_bar_btn_normal" android:state_enabled="true" android:state_focused="true" android:state_pressed="false"/>
    <!-- 按下时的背景图片 -->
    <item android:drawable="@drawable/title_bar_btn_pressed" android:state_enabled="true" android:state_pressed="true"/>
    <!-- 默认时的背景图片 -->
    <item android:drawable="@drawable/title_bar_btn_normal"/>

</selector>

②、在xml中引用,直接设置为背景即可

  <Button
        android:id="@+id/btn_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="24dip"
        android:background="@drawable/private_comm_backbtn_selector" />

注:Button定义后,无法保留Button按下时的背景图片(解决方式:在Button被点击后,动态的为Button设置背景即可)


二、自定义CheckBox

①、定义CheckBox选择器(一般放置于drawable文件夹下)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/private_comm_check_box_pressed" android:state_checked="true"/><!--选中时效果-->
    <item android:drawable="@drawable/private_comm_check_box_normal" android:state_checked="false"/><!--未选中时效果-->
    <item android:drawable="@drawable/private_comm_check_box_normal"/>

</selector>

②、定义CheckBox的样式(res/values/styles.xml)

    <style name="private_comm_checkbox_style" parent="@android:style/Widget.CompoundButton.CheckBox">
        <item name="android:button">@drawable/private_comm_checkbox_selector</item>
    </style>

③、在layout布局中使用该样式即可

    <CheckBox
        android:id="@+id/btn_check"
        style="@style/private_comm_checkbox_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />

注:CheckBox同Button位于listview的Item中时会自动的抢占焦点(可以用通过设置focusable="false"来解决,一般使用时可去掉最后三行代码)


 

 

 

 

Android 那些常用的自定义控件汇总

Android 客户端app编程——自定义控件  最近准备梳理一下Android开发的相关知识,看到一个很好地文章:Android开源项目分类汇总,当然这篇文章也早就被转载过好多次了,换之以“据说年薪...
  • dengpeng0419
  • dengpeng0419
  • 2015年07月31日 12:48
  • 1419

Android自定义控件——自定义组合控件

前面几篇博文介绍了Android如何自定义控件,其实就是讲一下如何“从无到有”的自定义一个全新的控件,继承View或者继承ViewGroup,复写其相关方法,这种自定义控件的方式相对来说难度较大,而且...
  • lee_tianya
  • lee_tianya
  • 2014年09月26日 16:42
  • 2542

Android自定义控件开发系列(一)——第一次动手做自定义控件

Android系统提供的控件多种多样,以至于很多初学者经常忘了还有这样那样的控件没用过甚至没听过。尽管如此,但是系统控件大多比较死板,而且不够美观,很多多样化的显示或是交互方式都没法完成。每每遇到这种...
  • a_running_wolf
  • a_running_wolf
  • 2015年10月10日 15:11
  • 3903

Android自定义控件——自定义属性

我们在自定义android组件的时候,除了用Java构建出组件的样子外,有时候还需要去申明一些“属性”提供给项目使用,那么什么是组件的属性呢? 例如在清单文件中,创建一个TextView的时候,这是需...
  • lee_tianya
  • lee_tianya
  • 2014年09月18日 13:02
  • 11851

Android自定义控件的实现

简单介绍Android自定义控件的方法和原理,重点还是在于活用。
  • yjp19871013
  • yjp19871013
  • 2017年02月03日 20:58
  • 924

Android自定义控件之自定义属性解析

有过Android自定义控件经验的同学都用过attr属性, 通常情况下都是在attrs.xml 文件中声明一个styleable, 并定义一些attr属性,在自定义控件中通过TypedArray来...
  • wbwjx
  • wbwjx
  • 2016年01月25日 23:32
  • 1335

Android自定义控件系列一:如何测量控件尺寸

测量控件尺寸(宽度、高度)是开发自定义控件的第一步,只有确定尺寸后才能开始画(利用canvas在画布上画,我们所使用的控件实际上都是这样画上去的)。当然,这个尺寸是需要根据控件的各个部分计算出来的,比...
  • shimiso
  • shimiso
  • 2015年10月27日 15:25
  • 7330

Android学习之自定义控件背景

自定义控件的背景有很多种方式,今天讲下使用在XML中自定义背景,主要使用到等标签。...
  • qq_23940659
  • qq_23940659
  • 2016年03月25日 15:13
  • 1363

Android View体系(十)自定义组合控件

上一篇我们讲到了自定义View,接着我们来讲讲常用的自定义组合控件,自定义组合控件就是多个控件组合起来成为一个新的控件,主要用来解决多次重复的使用同一类型的布局。比如我们应用的顶部的标题栏,还有弹出的...
  • itachi85
  • itachi85
  • 2016年05月19日 17:10
  • 9928

Android为自定义控件添加事件

1)文章简介 创建自定义控件并为它添加一个自定义事件 当用户单击自定义控件中的“测试”按钮时触发按钮自定义事件 2)定义一个layout(activity_custom.xml)作为...
  • bfboys
  • bfboys
  • 2016年10月16日 22:31
  • 926
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android自定义控件(一)
举报原因:
原因补充:

(最多只允许输入30个字)