【发布时间】:2016-09-06 22:03:36
【问题描述】:
我在 Android 中自定义 RadioButton 小部件时遇到问题。 我需要一个带有图标和图标下单行文本的 RadioButton。 类似于 iOS 底部栏的外观,图标和文本以不同颜色选中。 我创建了一个扩展 RadioButton 的自定义类并扩展了我的布局。
小部件工作正常,但不显示我的布局,它只显示背景,不显示 imageView 和 textView。 有什么想法吗?
提前致谢
public class RadioButtonImageToggle extends RadioButton {
private Drawable imageNormalState, imageCheckedState;
private ImageView imageView;
private TextView textViewTitle;
public RadioButtonImageToggle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initViews(context,attrs, defStyleAttr);
}
public RadioButtonImageToggle(Context context, AttributeSet attrs) {
super(context, attrs);
initViews(context, attrs, 0);
}
private void initViews(Context context, AttributeSet attrs, int defStyle) {
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.RadioButtonImageToggle, defStyle, R.style.Widget_Holo_RadioImageToggle);
try {
// get the text and colors specified using the names in attrs.xml
imageNormalState = a.getDrawable(R.styleable.RadioButtonImageToggle_imageNormalState);
imageCheckedState = a.getDrawable(R.styleable.RadioButtonImageToggle_imageCheckedState);
} finally {
a.recycle();
}
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.radio_image_toggle, null);
imageView = (ImageView) view.findViewById(R.id.iconToggle);
textViewTitle = (TextView) view.findViewById(R.id.textViewTitle);
imageView.setImageDrawable(imageNormalState);
textViewTitle.setText(getText());
}
@Override
public void toggle()
{
if(isChecked()) {
imageView.setImageDrawable(imageCheckedState);
if(getParent() instanceof RadioGroup) {
((RadioGroup)getParent()).clearCheck();
}
} else {
imageView.setImageDrawable(imageNormalState);
setChecked(true);
}
}
布局自定义是:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/iconToggle"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="TITLE"
android:id="@+id/textViewTitle"
android:layout_gravity="center"
android:lines="1"
android:singleLine="true" />
【问题讨论】:
-
我认为你不需要为它编码。您想在检查正确时更改文本的颜色
-
是的。我认为您最好使用stackoverflow.com/questions/19163628/… 之类的东西,而不是创建自己的radiobuttonView,除非除了自定义单选按钮之外您还想做其他事情。
标签: android radio-button custom-controls