自定义属性,自定义view,自定义UI模板

1、书写xml文件  values/attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- format="dimension“支持的格式为dp,sp,px ;如果为整型直接为int-->
    <attr name="rightPadding" format="dimension"></attr>
<!-- name为控件名称 -->
    <declare-styleable name="SlidingMenu">
        <attr name="rightPadding"></attr>
    </declare-styleable>

</resources>
2、在activity布局文件中,导入命名空间

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

自定义  com.imooc.slidingmenu当前应用的包名,不是类的包名

xmlns:hyman="http://schemas.android.com/apk/res/com.imooc.slidingmenu"

<com.imooc.slidingmenu.view.SlidingMenu
        android:id="@+id/id_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/img_frame_background"
        hyman:rightPadding="80dp" >
3、使用自定义属性

调用public SlidingMenu(Context context, AttributeSet attrs, int defStyle),最后要释放

// 获取我们定义的属性
		TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
				R.styleable.SlidingMenu, defStyle, 0);
//获取自定义属性的个数
		int n = a.getIndexCount();
		for (int i = 0; i < n; i++)
		{
			int attr = a.getIndex(i);
			switch (attr)
			{
			case R.styleable.SlidingMenu_rightPadding:
//<span style="font-family: Arial, Helvetica, sans-serif;">getDimensionPixelSize  获取属性的值,第二个参数为默认值并将50转化为50px</span>
				mMenuRightPadding = a.getDimensionPixelSize(attr,
						(int) TypedValue.applyDimension(
								TypedValue.COMPLEX_UNIT_DIP, 50, context
										.getResources().getDisplayMetrics()));//将50dp转化为像素值50px
				break;
			}
		}
		a.recycle();//释放



HorizontalScrollView默认会用水平的滑动手势进行拦截,如果你希望其内部的ViewPager可以自己处理,需要重写ViewPager在其onTouchEvent里面写上requestDisallowInterceptTouchEvent(true);当然这样ViewPage...


实例二

首先建立属性文件values文件夹下attrs.xml


自定义view把一些组件和自定义属性组合在一起,继承RelativeLayout



定义接口


取出属性,并赋值给变量, 




设置控件的属性


new layoutparams时可以把宽和高初始进去,addrule为添加位置处于哪里,最后调用addview()方法


界面使用方法,

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

自定义  com.imooc.slidingmenu当前应用的包名,不是类的包名,xmlns:自定义别名

xmlns:custom="http://schemas.android.com/apk/res-auto



动态控制自定义view和属性,通过接口回调为里面的控件添加事件


main activity调用者使用回调方法,先定义接口,本类中先用方法,具体的实现重写在调用者的类里面,通过这样可以告诉调用者事件什么时候发生,结束、状态等时调用者哪里实现具体的逻辑如发送消息、更新UI等

方法一  使用内部类的方式


方法二  继承接口,实现接口的方法也可以


效果图






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值