【问题标题】:Android radiobutton imageAndroid 单选按钮图片
【发布时间】:2012-07-20 05:04:55
【问题描述】:

我有一个带有自定义单选按钮的单选组。图标设置使用

rbFirst.setButtonDrawable(R.drawable.first);

但图标不在中心,我该如何解决? 我在 xml 文件和类中尝试了不同的属性,但没有效果。

【问题讨论】:

    标签: android


    【解决方案1】:

    尝试使用setGravity(Gravity.CENTER); 将其设置为背景可绘制对象。

    如果没有帮助,您将不得不从 RadioButton 派生一个新类并覆盖 onDraw()。

    这里是布局

    <?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>
    

    代码:

    package org.test.TestProj;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    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.color.transparent);
        }
        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);
                }
            }   
    }
    

    最后,这是一个 attrs.xml 文件,您需要将其放入 res/values 中,以便代码可以获取平台定义的属性。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>    
         <declare-styleable name="CompoundButton">
            <attr name="android:button" />
        </declare-styleable>
    </resources>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多