zoukankan      html  css  js  c++  java
  • xmlns:app

    Android自定义控件的属性,网上文章已经很多,之前看了也照着写了,其中有一个就是要自定义一个xml的命名空间后然后再给自定义属性赋值,后来发现不知道什么时候开始Android把这个改了,统一用

    xmlns:app="http://schemas.android.com/apk/res-auto"
    然后在用app作为命名空间给自定义属性赋值,例如:

    app:myimage_src="@drawable/myimage"
    当然了,这个属性肯定是要在res/values/attrs.xml 里面声明过:

    <resources> 

            <declare-styleable name="CusComponent"> 

                    <attr name="myimage_src" format="reference"/>

            </declare-styleable>

    </resources>

    此外,format 还有很多的属性,例如boolean,enum:如官方例子:

    [html] view plaincopy
     
    1. <resources>  
    2.    <declare-styleable name="PieChart">  
    3.        <attr name="showText" format="boolean" />  
    4.        <attr name="labelPosition" format="enum">  
    5.            <enum name="left" value="0"/>  
    6.            <enum name="right" value="1"/>  
    7.        </attr>  
    8.    </declare-styleable>  
    9. </resources>  

    然后在代码总获取到你设置的属性:

    在两参数的构造函数中:

    public CustomComponent(Context context, AttributeSet attrs) {super(context, attrs);

            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CusComponent);

            int imageSrcId;

            try {

             imageSrcId = a.getResourceId(R.styleable.CusComponent_myimage_src,R.drawable.myimage);

            finally {

                    a.recycle();

            }

            LayoutInflater inflater = LayoutInflater.from(context);

            inflater.inflate(R.layout.custom_component_layout, this, true); // 给自定义控件设置布局

            b = (ImageButton)findViewById(R.id.btn); // 获取到布局上的ImageButton

            b.setImageResource(imageSrcId);

    }

    当然其实还有很多个方法都是可以获取到属性的,这个比较简单而已。

    需要注意的是,通常,我们在给自定义的控件设置好属性后会调用invalidate() 和 requestLayout() 方法对UI进行刷新,确保其显示。

    以上是自定义控件属性的一些基本知识,然后项目中在做自定义控件的时候还学习了自定义dialog的定位:

    代码很简单:

    [java] view plaincopy
     
    1. Dialog dialog = new Dialog(MainActivity.this, R.style.dialog);  
    2. Window window = dialog.getWindow();  
    3. WindowManager.LayoutParams wlp = window.getAttributes();  
    4. wlp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;  
    5. window.setAttributes(wlp);  
    6. dialog.setContentView(R.layout.cloud_dialog_view);  
    7. dialog.show();  

    我把dialog定位在了top的位置,并且水平居中。当然你可以根据自己的需要定位在left、top,或者right这样。

    要说的是这里的wlp里还有两个关于定位的属性,x,y,这两个属性是根据坐标定位的,不过这个就意味着单位是像素piexl,因此用着不是很方便。

  • 相关阅读:
    设置nginx禁止IP直接访问,只能通过指定的域名访问
    (转)给力开源,.Net开源地址大收集
    Jmeter的使用
    Jmeter的安装
    虚拟机的使用(1)
    win下 Eclipse+PyDev环境搭建
    eclipse配置pydev解释器
    win下Python2.7+pip+Ipython安装
    CentOS 6.5 安装VMTools 及 设置拼音输入法
    CentOS 6.5 + JDK + mysql + tomcat + jpress搭建及所遇问题解决
  • 原文地址:https://www.cnblogs.com/ArRan/p/4741770.html
Copyright © 2011-2022 走看看