xiaoyan_12 2012-10-31 05:41 采纳率: 25%
浏览 14545
已采纳

android中radio button居中对齐的问题

我使用以下代码动态的生成了 RadioButtons:

RadioButton radioButton=new RadioButton(context);  
LayoutParams layoutParams=new LayoutParams(radioWidth,radioHeight);
layoutParams.gravity=Gravity.CENTER;
radioButton.setLayoutParams(layoutParams);
radioButton.setGravity(Gravity.CENTER);
BitmapDrawable bitmap = ((BitmapDrawable)drawableResource);
bitmap.setGravity(Gravity.CENTER);
radioButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.itabs_radio));
radioButton.setButtonDrawable(bitmap);

由以上代码看出我一直在设置按钮的位置,想把它们放在布局的中间。但是不知道什么原因,按钮可以排列在中间,但是左对齐。以下是android中radio button的默认格式:

<style name="Widget.CompoundButton">
<item name="android:focusable">true</item> 
<item name="android:clickable">true</item>
<item name="android:textAppearance">?android:attr/textAppearance</item> 
<item name="android:textColor">?android:attr/textColorPrimaryDisableOnly</item> 
<item name="android:gravity">center_vertical|left</item> 
</style>
 <style name="Widget.CompoundButton.RadioButton">
<item name="android:background">@android:drawable/btn_radio_label_background</item> 
<item name="android:button">@android:drawable/btn_radio</item> 
</style>

我用什么方法可以把所有的按钮按竖排排列,并都居中对齐呢?

  • 写回答

2条回答

  • O_Casper_ne 2012-11-01 03:12
    关注

    1.首先先创建一个布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <org.test.TestProj.RadioButtonCenter
        android:id="@+id/myview"
        android:layout_width="fill_parent" 
        android:layout_height="100dp" 
        android:layout_centerInParent="true"
        android:text="Button test"
        />
    </RelativeLayout>
    

    2.然后再添加自定义的RadioButtonCenter

    import android.util.AttributeSet;
    import android.view.Gravity;
    import android.widget.RadioButton;
    import android.graphics.Canvas;
    import android.graphics.drawable.Drawable;
    
    public class RadioButtonCenter extends RadioButton {
    
        public RadioButtonCenter(Context context, AttributeSet attrs) {
            super(context, attrs);
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CompoundButton, 0, 0);
            buttonDrawable = a.getDrawable(1);
            setButtonDrawable(android.R.id.empty);
        }
        Drawable buttonDrawable;
    
    
         @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
    
                if (buttonDrawable != null) {
                    buttonDrawable.setState(getDrawableState());
                    final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
                    final int height = buttonDrawable.getIntrinsicHeight();
    
                    int y = 0;
    
                    switch (verticalGravity) {
                        case Gravity.BOTTOM:
                            y = getHeight() - height;
                            break;
                        case Gravity.CENTER_VERTICAL:
                            y = (getHeight() - height) / 2;
                            break;
                    }
    
                int buttonWidth = buttonDrawable.getIntrinsicWidth();
                int buttonLeft = (getWidth() - buttonWidth) / 2;
                buttonDrawable.setBounds(buttonLeft, y, buttonLeft+buttonWidth, y + height);
                    buttonDrawable.draw(canvas);
                }
            }   
    }
    

    3.最后,你应该在res/values中添加 attrs.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>    
         <declare-styleable name="CompoundButton">
            <attr name="android:button" />
        </declare-styleable>
    </resources>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?