欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android自定义CheckBox_CheckBox添加图片和文字样式

程序员文章站 2022-03-01 14:34:14
...

不知道有没有哥们发现这么一个问题、Android 的控件 CheckBox 和 RadioButton 在配合一些复杂的地方使用、比如和 ImageView、TextView等控件配合使用完成一些复杂的功能的时候会出现兼容性问题、如果你使用了 paddingLeft 来使用按钮和文字之前有一点距离的时候、在Android 4.2 以下的机器上面会出现文字偏移的问题、亲测索尼和小米V5(Android 4.2以下)的系统上会出现这种现象、那么针对这一现象、想了很多办法都不能解决、最后只有自己封装一个 CheckBox 了、如果有哥们也遇到了同样的情况、那么恭喜你了、你可以直接使用我已经封装好的 CheckBox 了、并且还支持选择框和文字之间放一张图片、效果图如下

Android自定义CheckBox_CheckBox添加图片和文字样式


MyCheckBox核心代码

public MyCheckBox(Context context, AttributeSet attrs) {
	super(context, attrs);
	TypedArray a = context.obtainStyledAttributes(attrs, 
		R.styleable.mycheckbox);  
	mChecked = a.getBoolean(R.styleable.mycheckbox_checked, 
		false);
	mTextSize = a.getInt(R.styleable.mycheckbox_ctext_size, 14);
	mTextColor = a.getColor(R.styleable.mycheckbox_ctext_color, 
		0XFF333333); 
	mText = a.getString(R.styleable.mycheckbox_ctext);
	mImageRes = a.getResourceId(R.styleable.mycheckbox_src, -1);
	mSpacing = a.getInt(R.styleable.mycheckbox_spacing, 24);
	a.recycle();
	
	LayoutInflater.from(context)
		.inflate(R.layout.widget_my_checkbox, this, true);
	mCheckBox = (ImageView)this.findViewById(R.id.my_checkbox);
	mCheckBox.setSelected(mChecked);
	
	mImageView = (ImageView)this
		.findViewById(R.id.my_checkbox_images);
	if(-1 != mImageRes){
		mImageView.setBackgroundResource(mImageRes);
		LinearLayout.LayoutParams lp = new LinearLayout
			.LayoutParams(36, 36);
		lp.setMargins(mSpacing, 0, 0, 0);
		mImageView.setLayoutParams(lp);
		mImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
		mImageView.setVisibility(View.VISIBLE);
	}
	
	mTextView = (TextView)this.findViewById(R.id.my_checkbox_text);
	if(null != mText){
		mTextView.setText(mText);
		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
				android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 
				android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
		lp.setMargins(mSpacing, 0, 0, 0);
		mTextView.setLayoutParams(lp);
		mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP ,mTextSize);
		mTextView.setTextColor(mTextColor);
		mTextView.setVisibility(View.VISIBLE);
	}
	
	View v = this.findViewById(R.id.my_checkbox_linearLayout);
	v.setOnClickListener(this);
}


调用也很简单、直接在xml里面写就可以了

<com.dwtedx.widget.MyCheckBox
	android:id="@ id/my_checkbox"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	mycheckbox:ctext="@string/action_value"
	mycheckbox:src="@drawable/toyota" />

源代码链接: http://dwtedx.com/download.html?bdkey=s/1qWBfvbA 密码: 5tfi