• 自定义视图(自定义属性)


    前言


      前两篇我们介绍了下自定义视图到一些方法,自定义视图(继承View) 和  自定义视图(组合控件)  ,有了自定义控件有时候在灵活应用到方面还有所欠缺,因此需要进行一些自定义属性。

    属性定义


      我们先把所需要到属性定义好,在res/values/目录下新建xml文件attrs.xml,此文件定义了所有需要到属性,为了说明这个过程就定义了一个attr_title属性。如下所示

      attrs.xml

    1 <?xml version="1.0" encoding="utf-8"?>  
    2 <resources>  
    3     <declare-styleable name="CombinView">  
    4         <attr name="attr_title" format="string"></attr>
    5     </declare-styleable>  
    6 </resources>  

    其中:format属性可以用的值包括以下内容

    reference:参考某一资源ID

    color:颜色值

    boolean:布尔值

    dimension:尺寸值

    float:浮点值

    integer:整型值

    string:字符串

    fraction:百分数

    enum:枚举值

    flag:位或运算

    以上内容可以单独使用,也可以组合使用,比如reference|color,中间用“|”隔开

    属性应用

      属性定义好了,下面就看怎么使用了,如下所示

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     xmlns:cview="http://schemas.android.com/apk/res/com.example.testcview"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     tools:context="${packageName}.${activityClass}" 
     7     
     8     >
     9 
    10     <com.example.testcview.CombinView
    11         android:id="@+id/combinView1"
    12         android:layout_width="wrap_content"
    13         android:layout_height="wrap_content"
    14         android:layout_alignParentRight="true"
    15         android:layout_alignParentTop="true" 
    16         cview:attr_title="自定义题头"
    17         >
    18     </com.example.testcview.CombinView>
    19 
    20 </RelativeLayout>

      其中有两点需要注意,

      1>xmlns:cview="http://schemas.android.com/apk/res/com.example.testcview",需要声明自己的命名空间,前面的部分为http://schemas.android.com/apk/res/,此部分为固定,后一部分为自己的应用的包名com.example.testcview

      2>在自定义控件上设置自定义属性,cview:attr_title="自定义题头",需要增加自己的命名控件,

    这样自定义属性就应用到自定义控件上了。

    Java代码获取及设置属性内容

      在自定义控件的构造函数中获取设置的值并设置到相应位置,如下所示

     1 public class CombinView extends RelativeLayout {
     2 
     3     public CombinView(Context context, AttributeSet attrs) {
     4         super(context, attrs);
     5         LayoutInflater inflater = (LayoutInflater)context.getSystemService    (Context.LAYOUT_INFLATER_SERVICE);
     6         RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.custom_view,this);
     7         
     8         //获取自定义属性  
     9         TypedArray tArray = context.obtainStyledAttributes(attrs, R.styleable.CombinView);  
    10         String title = tArray.getString(R.styleable.CombinView_attr_title);
    11         
    12         TextView tvTitle = (TextView) layout.findViewById(R.id.tvTitle);
    13         System.out.println("title="+title);
    14         tvTitle.setText(title);
    15         
    16         tArray.recycle();
    17     }
    18 
    19 }

    其中,通过TypedArray tArray = context.obtainStyledAttributes(attrs, R.styleable.CombinView); 这句来获取自定义属性内容,然后通过

    String title = tArray.getString(R.styleable.CombinView_attr_title);获取指定属性的值

    这样,我们就把自定义属性的值取下来了,具体怎么使用就看具体需求就可以了

    后记

      通过这篇和前两篇的文章,自定义控件的大体流程就差不多了,差的只是在这个架子上増枝添叶,其原理是一样的。

    原文地址:http://www.cnblogs.com/luoaz/p/3985039.html

  • 相关阅读:
    html 滚动条
    mybatis的select、insert、update、delete语句
    eclipse 删除工作空间中.metadata 再加入以前的maven项目编译出错解决方法
    JavaDailyReports10_18
    JavaDailyReports10_17
    JavaDailyReports10_16
    JavaDailyReports10_15
    JavaDailyReports10_14
    JavaDailyReports10_13
    JavaDailyReports10_12
  • 原文地址:https://www.cnblogs.com/luoaz/p/3985039.html
Copyright © 2020-2023  润新知