Je génère des RadioButtons de manière dynamique avec
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);
comme vous pouvez le constater, j'essaie désespérément de régler le centre de gravité du bouton, mais sans raison, il est toujours centré et aligné à gauche, voici la raison - le style par défaut du bouton radio Android:
<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>
Y a-t-il un moyen que je peux aligner le bouton pour dessiner au centre?
Selon CompoundButton.onDraw()
code source il est toujours aligné à gauche.
(Notez la ligne buttonDrawable.setBounds(0, y, buttonDrawable.getIntrinsicWidth(), y + height);
)
Vous devrez dériver une nouvelle classe de RadioButton
et remplacer onDraw()
.
EXEMPLE AJOUTE PLUS TARD:
Ok, alors voici ce que vous faites. Tout d'abord, voici une mise en page:
<?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>
Deuxièmement, voici le RadioButtonCenter à dessin personnalisé:
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);
}
}
}
Enfin, voici un fichier attrs.xml que vous devez insérer dans res/values afin que le code puisse être attribué aux attributs définis par la plate-forme.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CompoundButton">
<attr name="Android:button" />
</declare-styleable>
</resources>
Solution simple, vous pouvez ajouter un arrière-plan à RadioButton ou définir background = "@ null",.
<RadioButton
Android:id="@+id/cp_rd_btn"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:background="@null"/>
mis à jour:
<RadioGroup
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<RadioButton
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:background="@null"
Android:button="@null"
Android:drawableTop="@drawable/account_coolme_selector"
Android:gravity="center" />
<RadioButton
Android:layout_width="0dp"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:background="@null"
Android:button="@null"
Android:drawableTop="@drawable/account_qq_selector"
Android:gravity="center"
/>
</RadioGroup>
<radiogroup Android:paddingLeft = "20dp" Android:background="@color/gray">
Fondamentalement - j'ai un groupe radio aligné horizontalement, et en développant la couleur d'arrière-plan à gauche de 20dp (ou la moitié de la largeur de votre bouton radio), il apparaît comme s'il était centré.