Created a custom button that does not require layout layouts and can, if necessary, align the displayed images.
Button.xml Layout File:
<Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/custom_button" style="@style/custom_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:drawablePadding="5dp" android:gravity="center" />
Custom Button Class:
public class DrawableAlignedButton extends RelativeLayout { private View view; private Button button; public DrawableAlignedButton(final Context context, final AttributeSet attrs) { super(context, attrs); init(context, attrs); } public DrawableAlignedButton(final Context context) { super(context); init(context, null); } public DrawableAlignedButton(final Context context, final AttributeSet attrs, final int style) { super(context, attrs, style); init(context, attrs); } private void init(final Context context, final AttributeSet attributeSet) { view = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.button, this, true); button = (Button) view.findViewById(R.id.custom_button); String buttonText = null; int drawableStart = 0; int drawableEnd = 0; if (attributeSet != null) { final TypedArray a = context.getTheme().obtainStyledAttributes(attributeSet, R.styleable.CustomButtonStyle, 0, 0); buttonText = a.getString(R.styleable.CustomButtonStyle_buttonText); drawableStart = a.getResourceId(R.styleable.CustomButtonStyle_buttonDrawableStart, 0); drawableEnd = a.getResourceId(R.styleable.CustomButtonStyle_buttonDrawableEnd, 0); a.recycle(); } FontUtil.getInstance(context).useNormalRegularFont(button); if (buttonText != null) { button.setText(buttonText); } button.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableStart, 0, drawableEnd, 0); } public void setButtonText(final String text) { if (button != null) { button.setText(text); } } public void setDrawableStart(final int drawableStart, final int drawableEnd) { if (button != null) { button.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableStart, 0, drawableEnd, 0); } } }
How to use it in XML:
<com.package.view.DrawableAlignedButton xmlns:drawableAlignedButton="http://schemas.android.com/apk/res-auto" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/transparent_button_selector" drawableAlignedButton:buttonDrawableStart="@drawable/small_active" drawableAlignedButton:buttonText="Button Text" />
source share