Android RadioButton与container左侧padding调整

Posted on   Capterlliar  阅读(29)  评论(0编辑  收藏  举报

遇到了这个问题:Android: Set margin to left side of radiobutton drawable

同时在这个情景下并不能修改controller内容,希望通过xml达到这个效果。一般是通过添加android:paddingLeft来达到效果,但在RadioButton中它修改的是radio和text之间的距离。

另一种方法是在外面套一个LinearLayout,但RadioGroup中只能直接放RadioButton,如果包一层LinearLayout会导致单选效果消失。通常来说自己包一个RadioButton然后手动setChecked会比较方便,但现在不能改controller。

解决方法:添加一个inset

radio_button.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="?android:attr/listChoiceIndicatorSingle"
    android:insetLeft="16dp"/>

然后

            <RadioButton android:id="@+id/radio"
                android:button="@drawable/radio_button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="72dp"
                android:paddingLeft="20dp"
                android:background="@drawable/background_top"/>

但会产生新的问题:RadioButton focus background shape

RadioButton ripple范围变了。可以考虑去除ripple,方法是添加android:background="@android:color/transparent",但我又需要给RadioButton一个背景。

解决方法:将button设为null,把原本的button设为android:drawableStart,然后调一调padding即可。此时的paddingLeft是真正的paddingLeft,即drawable到container之间的距离。还有据肉眼观察listChoiceIndicatorSingle周围包的padding是4dp。

            <RadioButton android:id="@+id/radio"
                android:button="@null"
                android:drawableStart="@drawable/radio_button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="72dp"
                android:paddingLeft="20dp"
                android:background="@drawable/background_top"/>

 

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示