前段时间用到向360按钮样式的开关,于是就翻了出来,拿出来记录一下便于以后查找.
一,首先在res目录中values创建attrs.xml文件并在xml中设置属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="SettingView">
<!-- 设置文本属性 -->
<attr name="title" format="string" /> <!-- name:属性的名称 format:属性的值的类型-->
<!-- 开关按钮隐藏显示的属性 -->
<attr name="istoggle" format="boolean" />
</declare-styleable>
</resources>
二,创建一个类继承RelativeLayout,然后就是增加属性啦
public class SettingView extends RelativeLayout {
private static final String NAMESPACE = "http://schemas.android.com/apk/res-auto";
private TextView mText;
private ImageView mIsToggle;
public boolean mToggle;
public SettingView(Context context) {
//super(context);
this(context,null);
}
public SettingView(Context context, AttributeSet attrs) {
//super(context, attrs);
this(context,attrs,-1);
}
public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
String title = attrs.getAttributeValue(NAMESPACE, "title");
mText.setText(title);
boolean isToggle = attrs.getAttributeBooleanValue(NAMESPACE, "istoggle", true);
mIsToggle.setVisibility(isToggle ? View.VISIBLE : View.GONE);
}
/**
* 给自定义控件加载设置中心条目的布局文件
*/
private void initView() {
View view = View.inflate(getContext(), R.layout.settingview, null);
this.addView(view);
mText = (TextView) view.findViewById(R.id.setting_tv_text);
mIsToggle = (ImageView) view.findViewById(R.id.settting_iv_istoggle);
}
/**
* 提供给activity,让activity可以通过调用此方法更改自定义控件开关按钮图片
*
*/
public void setToggleOn(boolean isToggle){
mToggle = isToggle;
if (isToggle) {
//开的图片
mIsToggle.setImageResource(R.mipmap.on);
}else{
//关的图片
mIsToggle.setImageResource(R.mipmap.off);
}
}
/**
* 获取开关按钮的状态,提供给activity用的
*/
public boolean isToggle(){
return mToggle;
}
/**
* 更改开关按钮
*/
public void toggle(){
setToggleOn(!mToggle);
}