自定义属性

一、书写xml
1.在value文件夹下面新建attr.xml


<resources>
     <declare-styleable name="SlideMenu">
         <attr name="rightPadding" format="dimension">attr>
     declare-styleable>
resources>

二、在布局文件中引用
自定义属性_第1张图片

1.在布局文件中使用自定义属性时要特别注意自定义的命名空间
   xmlns:lsj="http://schemas.android.com/apk/res/com.rixin.testontouch" 

“http://schemas.android.com/apk/res” 前面的跟上面android 的相同。
“com.rixin.testontouch” 后面的是整个应用的包名,并不是自定义view类所在的包名,是AndroidManifest.xml 中的“package”。

2.在布局文件中使用直接用自定义的 命名空间:属性名=“”

lsj:rightPadding="100dp"

三、在自定义的view中,实现它的三个构造方法

    public SlidingMenu(Context context) {
        this(context,null);
        // TODO Auto-generated constructor stub
    }

    /**
     * 未使用自定义属性时调用
     * @param context
     * @param attrs
     */
    public SlidingMenu(Context context, AttributeSet attrs) {
        this(context, attrs,0);

    }

/**
     * 当使用了自定义属性时,调用
     * @param context
     * @param attrs
     * @param defStyleAttr
     */

    public SlidingMenu(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // 获取我们自定义的属性
        Log.i(TAG, "super(context, attrs, defStyleAttr)");
        TypedArray a=context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlideMenu, defStyleAttr, 0);
        int n=a.getIndexCount();
        for(int i=0;iint attr=a.getIndex(i);
            switch (attr) {
            case R.styleable.SlideMenu_rightPadding:
                 mMenuRightPadding=a.getDimensionPixelOffset(attr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50,context.getResources().getDisplayMetrics()));
                break;

            default:
                break;
            }
        }
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics=new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        mScreenWidth=outMetrics.widthPixels;
        //把dp转化为px
        //mMenuRightPadding=(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50,context.getResources().getDisplayMetrics()); 

        a.recycle();
    }

使用 TypedArray 去获取我们自定义的属性,但TypedArray 使用完了之后一定要释放掉

a.recycle();

你可能感兴趣的:(Android)