2011-06-11 50 views
3

我为我的Android应用程序创建了一个自定义RadioButton,它只是用自定义图像替换标准单选按钮。现在我想让通常显示在标准按钮右侧的文本标签看起来与其中间的自定义按钮重叠。Android Dev:带文本的自定义单选按钮?

有没有办法做到这一点?

UPDATE:这是我在创建自定义组件做这样的尝试:

public class RadioButtonText extends RadioButton { 
    Paint myPaint = new Paint(); 

    public RadioButtonText(Context context) { 
     super(context); 
    } 

    public RadioButtonText(Context context, AttributeSet attrbs) { 
     super(context, attrbs); 
    } 

    @Override 
    protected void onDraw (Canvas canvas) { 
     super.onDraw(canvas); 
     String myText = (String) getText(); 
     canvas.drawText(myText, 10, 10, myPaint); 
    }  
} 

这里是我用它在我的layout.xml:

<view 
    class="com.stickfigs.blockball.BlockBallLevelSelect$RadioButtonText" 
    android:button="@drawable/bb_button" 
    android:id="@+id/levelButton0" 
    android:layout_height="96px" 
    android:layout_width="96px" 
    android:textColor="#fff" 
    android:text="1"> 
</view> 

但是,当我尝试运行应用程序我得到这个错误:

06-11 22:16:32.642: ERROR/AndroidRuntime(323): Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class com.stickfigs.blockball.BlockBallLevelSelect$RadioButtonText 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.createView(LayoutInflater.java:503) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.app.Activity.setContentView(Activity.java:1647) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at com.stickfigs.blockball.BlockBallLevelSelect.onCreate(BlockBallLevelSelect.java:30) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  ... 11 more 
06-11 22:16:32.642: ERROR/AndroidRuntime(323): Caused by: java.lang.NoSuchMethodException: RadioButtonText(Context,AttributeSet) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at java.lang.Class.getMatchingConstructor(Class.java:660) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at java.lang.Class.getConstructor(Class.java:477) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  at android.view.LayoutInflater.createView(LayoutInflater.java:475) 
06-11 22:16:32.642: ERROR/AndroidRuntime(323):  ... 23 more 
06-11 22:16:32.662: WARN/ActivityManager(42): Force finishing activity com.stickfigs.blockball/.BlockBallLevelSelect 
06-11 22:16:33.198: WARN/ActivityManager(42): Activity pause timeout for HistoryRecord{43edc648 com.stickfigs.blockball/.BlockBallLevelSelect} 

我在做什么错?

+0

有趣;我只是自己进入android。看起来像是异常是'java.lang.NoSuchMethodException:RadioButtonText(Context,AttributeSet)',但我看到在你的代码中定义的构造函数... – 2011-06-11 22:26:23

+0

是的,我得到它之前,我有这种方法,所以我加了它,但错误仍然存​​在。 – 2011-06-11 22:32:56

+0

我想我在这里看到问题... – 2011-06-12 00:08:33

回答

2

RadioButtonTextBlockBallLevelSelect的内部类。如果没有现有的外部类对象,则无法实例化它的实例。因此,您需要将RadioButtonText标记为static以引用XML中的类型。

作为一个方面说明,由于它将是静态的,因此不再将其作为内部类来使用。

+0

谢谢!那就是诀窍。 :) – 2011-06-12 04:20:48

0

radioButton是TextView的一个子类,图像只是左边的drawable,所以也许更容易移除drawable left并使用drawable bottom。样式的其余部分与任何textview一样,因此可绘制Padding,填充和边距适用。

<RadioButton 
      android:id="@+id/level" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:drawableLeft="@null" 
      android:drawableBottom="@android:drawable/btn_radio" 
      android:text="1" />