Android 自定义view相关

作者: 超神的菠萝 | 来源:发表于2017-01-17 16:33 被阅读149次

    Android 自定义view的四个构造函数什么情况下调用

      // 在new一个view的时会被调用
        public TestView7(Context context) {
            super(context);
        }
    // 在xml中定义时会被调用(即使xml中的自定义view有使用自定义属性,依然调用2个参数的构造方法)
        public TestView7(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    // 自己手动调用才会被使用
        public TestView7(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    // 自己手动调用才会被使用
        public TestView7(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    

    Android 自定义view构造方法中的参数都是什么

    Context:上线文
    
    AttributeSet attrs : 从xml中定义的参数
    
    int defStyleAttr   :自定义view的主题(主题中优先级最高的属性)
    
    int defStyleRes    :自定义view的风格(style中次于xml中定义的风格)
    
    在android中的属性可以在多个地方进行赋值,涉及到的优先级排序为:
    
    Xml直接定义 > xml中style引用 > defStyleAttr > defStyleRes > theme直接定义
    

    如何自定义view的属性

    Custom View添加自定义属性主要是通过declare-styleable标签为其配置自定义属性,具体做法是: 在res/values
    目录下增加一个resources xml文件,示例如下(res/values/attrs_my_custom_view.xml): 
    
    <resources>
        <declare-styleable name="MyCustomView">
            <attr name="custom_attr1" format="string" />
            <attr name="custom_attr2" format="string" />
            <attr name="custom_attr3" format="string" />
            <attr name="custom_attr4" format="string" />
        </declare-styleable>
        <attr name="custom_attr5" format="string" />
    </resources
    

    获取自定义属性

    public MyCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
    
        String attr1 = ta.getString(R.styleable.MyCustomView_custom_attr1);
        String attr2 = ta.getString(R.styleable.MyCustomView_custom_attr2);
        String attr3 = ta.getString(R.styleable.MyCustomView_custom_attr3);
        String attr4 = ta.getString(R.styleable.MyCustomView_custom_attr4);
    
        Log.e("customview", "attr1=" + attr1);
        Log.e("customview", "attr2=" + attr2);
        Log.e("customview", "attr3=" + attr3);
        Log.e("customview", "attr4=" + attr4);
        ta.recycle();
     }
    

    使用自定义view的属性值

    在xml的根layout中引入命名空间
     xmlns:lsp="http://schemas.android.com/apk/res-auto"(lsp是自己起的名字)
    在自己的view中使用
      android:padding="10dp"
      lsp:image="@mipmap/ic_launcher"
    

    相关文章

      网友评论

        本文标题:Android 自定义view相关

        本文链接:https://www.haomeiwen.com/subject/sraubttx.html