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等
方法一 使用内部类的方式
方法二 继承接口,实现接口的方法也可以
效果图