android_84_自定义属性

来源:互联网 发布:java培训好不好 编辑:程序博客网 时间:2024/06/03 13:00




第1步:

在res/values目录下,新建一个attr.xml


第2步:如下编写attr.xml

<?xml version="1.0" encoding="utf-8"?><resources>    // dimension表示支持 dp,sp    <attr name="rightPadding" format="dimension"></attr>    // name 是自定义View的类名    <declare-styleable name="SGSlidingMenu">                // 自定义属性名称        <attr name="rightPadding"></attr>    </declare-styleable></resources>


第3步,在activity_main.xml中使用自定义View的自定义属性

先声明命名空间 (res/后面的是应用的bundle ID)

xmlns:beyond="http://schemas.android.com/apk/res/com.sg31.slidingmenu"


// 自定义View的全名称     自定义属性  beyond:rightPadding = "50dp"<com.sg31.slidingmenu.view.SGSlidingMenu        android:id="@+id/id_menu"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@drawable/img_frame_background"        beyond:rightPadding="80dp" >        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:orientation="horizontal" >            // 左边是隐藏菜单            <include layout="@layout/left_menu" />                        // 右边是主界面            <LinearLayout                android:layout_width="match_parent"                android:layout_height="match_parent"                android:background="@drawable/qq" >            </LinearLayout>        </LinearLayout>    </com.sg31.slidingmenu.view.SGSlidingMenu>



第4步,在自定义View中,通过遍历,获取设定的自定义属性的值的大小


/** * 当使用了自定义属性时,会调用此构造方法 *  * @param context * @param attrs * @param defStyle */public SGSlidingMenu(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// 通过TypedArray获取我们定义的属性TypedArray typeArr = context.getTheme().obtainStyledAttributes(attrs,R.styleable.SGSlidingMenu, defStyle, 0);// 获取自定义属性数量for (int i = 0; i < typeArr.getIndexCount(); i++) {int attr = typeArr.getIndex(i);switch (attr) {case R.styleable.SGSlidingMenu_rightPadding:// 默认值:   将50dp 转成 像素int initValue = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, context.getResources().getDisplayMetrics());// 获取自定义属性值mMenuRightPadding = typeArr.getDimensionPixelSize(attr,initValue);break;}}// 千万记得要释放!!!typeArr.recycle();// 获取屏幕宽WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);mScreenWidth = outMetrics.widthPixels;}





















0 0
原创粉丝点击