android 从文本中设置单选按钮
android set radio button right from text
早上好!
我想直接从他的文本中设置一个单选按钮。
我在这里看到了这样的解决方案:
<RadioButton
android:drawablePadding="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New RadioButton"
android:id="@+id/radioButton"
android:drawableRight="@android:drawable/btn_radio"
android:button="@null"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:paddingStart="18dp"
android:paddingEnd="12dp"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:checked="false" />
这直接从他的文本中设置了单选按钮,但我不喜欢我用这段代码获得的替代单选按钮的样式。
有没有办法使用默认的单选按钮样式?
你可以试试这个
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RadioButton
android:id="@+id/radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/radiobutton"
android:layout_alignBottom="@+id/radiobutton"
android:layout_alignParentLeft="true">
已解决但下一个问题
这是解决方案:
<RadioGroup
android:id="@+id/rgRight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/HeaderSectionSort"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:weightSum="1">
<RadioButton
android:id="@+id/radio1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:button="@null"
android:drawableRight="@drawable/ic_selected_sort"
android:text="@string/Radio1"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:height="40dp"
android:paddingLeft="16dp"
android:paddingRight="10dp" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#f4f4f4"
android:id="@+id/Seperator3"
android:layout_marginTop="5dp" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:paddingLeft="16dp"
android:button="@null"
android:drawableRight="@drawable/ic_selected_sort"
android:buttonTint="@color/DefaultGreen"
android:text="@string/Radio2"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:height="40dp"
android:paddingRight="10dp" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#f4f4f4"
android:id="@+id/Seperator4"
android:layout_marginTop="5dp" />
<RadioButton
android:id="@+id/radio3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:paddingLeft="16dp"
android:button="@null"
android:drawableRight="@drawable/ic_selected_sort"
android:text="Radio3"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:height="40dp"
android:paddingRight="10dp" />
</RadioGroup>
结果:
问题:
我想在开始时以编程方式隐藏可绘制对象 (ic_selected_sort)。然后单击将其设置为可见。
我尝试这样的事情:
rb1.setButtonDrawable(android.R.color.white);
但是我没有生效。
有任何想法吗? :)
这是我添加到项目复选框中的内容:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/tick_green" >
<shape >
<size android:width="@dimen/d32"
android:height="@dimen/d32"/>
</shape>
</item>
<item android:state_checked="false"
android:drawable="@drawable/uncheck" >
<shape >
<size android:width="@dimen/d32"
android:height="@dimen/d32"/>
</shape>
</item>
我的复选框代码如下所示:
<CheckBox
android:id="@+id/reason_cb_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:button="@null"
android:drawableRight="@drawable/my_checkbox_drawable" <- set it here
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="@dimen/d16"
android:paddingRight="@dimen/d16"
android:text="@string/some_text" />
您或许可以创建一个类似的可绘制对象并将其设置为您的 RadioButton drawableRight 属性。
注意:"uncheck"是我为未选中状态创建的透明drawable。
Kotlin 程序化解决方案:
private fun createDrawableRightRadioButton(message: String): RadioButton {
val radioButton = RadioButton(context)
radioButton.layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
radioButton.setText(message)
radioButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.resources.getDimension(R.dimen.text_medium)); //<dimen name="text_medium">14sp</dimen>
radioButton.setTextColor(ContextCompat.getColorStateList(context, R.color.radio_grey_text_selector))
radioButton.typeface = Typeface.create("roboto", Typeface.NORMAL)
radioButton.layoutDirection = View.LAYOUT_DIRECTION_RTL
radioButton.setButtonDrawable(0) // for removing default drawable
radioButton.setCompoundDrawablePadding(10)
radioButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.gostyle_radio_button_selector, 0); // for adding drawable on the right
radioButton.gravity = Gravity.CENTER_VERTICAL
return radioButton
}
你只需要在Radio Button中添加如下代码
android:layoutDirection="rtl"
eg.
<RadioButton
android:id="@+id/rb_male"
android:layout_width="wrap_content"
android:layoutDirection="rtl"
android:layout_height="wrap_content"
android:textColor="@color/text_color"
android:text="Male" />
早上好!
我想直接从他的文本中设置一个单选按钮。 我在这里看到了这样的解决方案:
<RadioButton
android:drawablePadding="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New RadioButton"
android:id="@+id/radioButton"
android:drawableRight="@android:drawable/btn_radio"
android:button="@null"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:paddingStart="18dp"
android:paddingEnd="12dp"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:checked="false" />
这直接从他的文本中设置了单选按钮,但我不喜欢我用这段代码获得的替代单选按钮的样式。
有没有办法使用默认的单选按钮样式?
你可以试试这个
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RadioButton
android:id="@+id/radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/radiobutton"
android:layout_alignBottom="@+id/radiobutton"
android:layout_alignParentLeft="true">
已解决但下一个问题
这是解决方案:
<RadioGroup
android:id="@+id/rgRight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/HeaderSectionSort"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:weightSum="1">
<RadioButton
android:id="@+id/radio1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:button="@null"
android:drawableRight="@drawable/ic_selected_sort"
android:text="@string/Radio1"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:height="40dp"
android:paddingLeft="16dp"
android:paddingRight="10dp" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#f4f4f4"
android:id="@+id/Seperator3"
android:layout_marginTop="5dp" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:paddingLeft="16dp"
android:button="@null"
android:drawableRight="@drawable/ic_selected_sort"
android:buttonTint="@color/DefaultGreen"
android:text="@string/Radio2"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:height="40dp"
android:paddingRight="10dp" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#f4f4f4"
android:id="@+id/Seperator4"
android:layout_marginTop="5dp" />
<RadioButton
android:id="@+id/radio3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:paddingLeft="16dp"
android:button="@null"
android:drawableRight="@drawable/ic_selected_sort"
android:text="Radio3"
android:textColor="@color/DefaultGrey"
android:textSize="14sp"
android:height="40dp"
android:paddingRight="10dp" />
</RadioGroup>
结果:
问题: 我想在开始时以编程方式隐藏可绘制对象 (ic_selected_sort)。然后单击将其设置为可见。
我尝试这样的事情:
rb1.setButtonDrawable(android.R.color.white);
但是我没有生效。 有任何想法吗? :)
这是我添加到项目复选框中的内容:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/tick_green" >
<shape >
<size android:width="@dimen/d32"
android:height="@dimen/d32"/>
</shape>
</item>
<item android:state_checked="false"
android:drawable="@drawable/uncheck" >
<shape >
<size android:width="@dimen/d32"
android:height="@dimen/d32"/>
</shape>
</item>
我的复选框代码如下所示:
<CheckBox
android:id="@+id/reason_cb_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:button="@null"
android:drawableRight="@drawable/my_checkbox_drawable" <- set it here
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="@dimen/d16"
android:paddingRight="@dimen/d16"
android:text="@string/some_text" />
您或许可以创建一个类似的可绘制对象并将其设置为您的 RadioButton drawableRight 属性。
注意:"uncheck"是我为未选中状态创建的透明drawable。
Kotlin 程序化解决方案:
private fun createDrawableRightRadioButton(message: String): RadioButton {
val radioButton = RadioButton(context)
radioButton.layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
radioButton.setText(message)
radioButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.resources.getDimension(R.dimen.text_medium)); //<dimen name="text_medium">14sp</dimen>
radioButton.setTextColor(ContextCompat.getColorStateList(context, R.color.radio_grey_text_selector))
radioButton.typeface = Typeface.create("roboto", Typeface.NORMAL)
radioButton.layoutDirection = View.LAYOUT_DIRECTION_RTL
radioButton.setButtonDrawable(0) // for removing default drawable
radioButton.setCompoundDrawablePadding(10)
radioButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.gostyle_radio_button_selector, 0); // for adding drawable on the right
radioButton.gravity = Gravity.CENTER_VERTICAL
return radioButton
}
你只需要在Radio Button中添加如下代码
android:layoutDirection="rtl"
eg.
<RadioButton
android:id="@+id/rb_male"
android:layout_width="wrap_content"
android:layoutDirection="rtl"
android:layout_height="wrap_content"
android:textColor="@color/text_color"
android:text="Male" />