我想在一个片段中创建一些dinamically的单选按钮,我只有样式问题。如果我将radiobutton代码放在xml文件中,则会正确应用默认样式,但是当我通过函数创建radiobutton时,我会看到不同的样式!
XML
<RadioGroup
android:id="@+id/radiogroup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:animationCache="false">
<RadioButton
android:text="RadioButton 1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/radioButton3" />
<RadioButton
android:text="RadioButton 2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/radioButton4" />
</RadioGroup>
RESULT
JAVA CODE
此代码放在片段
中的onCreateView中public void addRadioButton(Context ctx,int num){
RadioGroup radioGroup= (RadioGroup) alertInflatedView.findViewById(R.id.radiogroup);
for (int i = 1; i <= num; i++) {
RadioButton radioButton = new RadioButton(ctx);
radioButton.setId(1+i);
radioButton.setText("Radio " + radioButton.getId());
radioButton.setTextColor(getResources().getColor(R.color.black));
radioGroup.addView(radioButton);
}
}
RESULT
正如您所看到的单选按钮具有不同的样式,如果有可能,有人可以帮助我以编程方式应用默认样式吗?
答案 0 :(得分:12)
您必须在drawable或style.xml上创建样式,作为您的要求。
<强>抽拉/ null_selector.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@android:color/transparent" />
</selector>
设置每个按钮以使用它(并使文本居中),如下所示(R.drawable.null_selector是选择器XML):
现在,在你的Activity中,你必须实现这样的风格。
radioButton.setText(Integer.toString(i));
radioButton.setGravity(Gravity.CENTER);
radioButton.setButtonDrawable(R.drawable.null_selector);
我认为,这将有助于您在radiobutton中实现自定义样式。
答案 1 :(得分:3)
感谢达摩,我遵循了你的建议,改变了一些事情,我解决了!
JAVA CODE
public void addRadioButton(Context ctx,int num){
RadioGroup radioGroup= (RadioGroup) alertInflatedView.findViewById(R.id.radiogroup);
RadioGroup.LayoutParams layoutParams = new RadioGroup.LayoutParams(
RadioGroup.LayoutParams.MATCH_PARENT,
RadioGroup.LayoutParams.WRAP_CONTENT);
for(int i=0; i<num; i++){
RadioButton radioButton = new RadioButton(ctx);
radioButton.setId(1+i);
radioButton.setText("Radio"+i);
radioButton.setTextSize(16);
radioButton.setTextColor(getResources().getColor(R.color.black));
radioButton.setButtonDrawable(R.drawable.radio_button_selector);
radioButton.setPadding(80,0,0,0);
radioButton.setGravity(Gravity.CENTER_VERTICAL);
radioButton.setLayoutParams(layoutParams);
radioGroup.addView(radioButton);
}
}
XML RADIO BUTTON SELECTOR,带有选中和未选中的按钮图像
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="false" android:drawable="@drawable/unchekedradiobutton" />
<item android:state_checked="true" android:drawable="@drawable/checkedradiobutton" />
<item android:drawable="@drawable/unchekedradiobutton" /> <!-- default -->
答案 2 :(得分:1)
使用Inflater实例来扩充自定义布局并轻松获取自定义Radiobutton
private RadioButton createCustomRadioButton(Context context){
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.radio_button,null);
RadioButton radioButton = (RadioButton) v.findViewById(R.id.radio_button);
radioButton.setText("It Works!");
((ViewGroup)radioButton.getParent()).removeView(radioButton);
return radioButton;
}
radio_buttom.xml
<RadioButton
android:id="@+id/radio_button"
style="@style/radio"
android:background="@drawable/style_line" />
style.xml
<style name="radio">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginLeft">30dp</item>
<item name="android:layout_marginRight">30dp</item>
<item name="android:layout_marginTop">10dp</item>
<item name="android:layout_marginBottom">10dp</item>
<item name="android:padding">10dp</item>
<item name="android:drawablePadding">5dp</item>
<item name="android:textColor">@color/whiteColor</item>
<item name="android:textColorHint">@color/hintColor</item>
<item name="android:editTextColor">@color/whiteColor</item>
</style>
by Ubirajara(México)
答案 3 :(得分:0)
以编程方式,我建议为循环中的每个单选按钮设置 ColorStateList ,如下所示:
radioButton.setButtonTintList(getRadioButtonColors());
然后
private ColorStateList getRadioButtonColors() {
return new ColorStateList (
new int[][] {
new int[] {android.R.attr.state_checked}, // checked
new int[] {android.R.attr.state_enabled} // unchecked
},
new int[] {
Color.GREEN, // checked
Color.BLUE // unchecked
}
);
}
android.R.attr.state_checked
定义选中按钮的颜色(绿色),而android.R.attr.state_enabled
定义未选中按钮的颜色(蓝色)。< / p>