Android:TextView旁边的Drawable,具有LinearLayout中每个TextView的权重

kum*_*mar 7 android android-layout android-linearlayout

我试图实现如Pic1所示的结果.尝试设置重力,paddingleft等,但可绘制的图像出现在右端而不是文本旁边(如图2所示)在此输入图像描述).任何人都可以建议如何在TextView旁边对齐图像?另外如何设置drawable的大小?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:background="@drawable/separator"
    android:padding="10dp">

<TextView
    android:id="@+id/sms"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:layout_weight="1"
    android:drawableEnd="@drawable/message"
    android:drawableRight="@drawable/message"
    android:gravity="center"
    android:paddingLeft="3dp"
    android:paddingRight="3dp"
    android:text="SMS" />

<TextView
    android:id="@+id/call"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:drawableEnd="@drawable/call"
    android:drawableRight="@drawable/call"
    android:gravity="center"
    android:text="CALL" />

<TextView
    android:id="@+id/email"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center"
    android:drawableEnd="@drawable/mail"
    android:drawablePadding="3dp"
    android:drawableRight="@drawable/mail"
    android:text="MAIL" />
Run Code Online (Sandbox Code Playgroud)

Dhi*_*asu 6

试着围绕这个建立.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="horizontal"
    android:padding="10dp">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1">

        <TextView
            android:id="@+id/sms"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:gravity="center"
            android:drawableRight="@drawable/message"
            android:text="SMS" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1">

        <TextView
            android:id="@+id/call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/call"

            android:gravity="center"
            android:text="CALL" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1">

        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/mail"
            android:gravity="center"
            android:text="MAIL" />
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


kum*_*mar 0

创建了一个自定义按钮,不需要布局嵌套,并且可以根据需要对齐可绘制图像。

布局文件button.xml:

<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" />
Run Code Online (Sandbox Code Playgroud)

自定义按钮类:

public class DrawableAlignedButton extends RelativeLayout {

  private View view;
  private Button button;

  /**
   * @param context
   *          used to inflate the View.
   * @param attrs
   *          XML defined attributes.
   */
  public DrawableAlignedButton(final Context context, final AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs);
  }

  /**
   * @param context
   *          used to inflate the View.
   */
  public DrawableAlignedButton(final Context context) {
    super(context);
    init(context, null);
  }

  /**
   * @param context
   *          used to inflate the View.
   * @param attrs
   *          XML defined attributes.
   * @param style
   *          the style for the View.
   */
  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);
  }

  /**
   * Sets the button text.
   * 
   * @param text
   *          the text to be set.
   */
  public void setButtonText(final String text) {
    if (button != null) {
      button.setText(text);
    }
  }

  /**
   * Sets the drawable to the button.
   * 
   * @param drawableStart
   *          the drawable to set at the beginning of the text.
   * @param drawableEnd
   *          the drawable to set at the end of the text.
   */
  public void setDrawableStart(final int drawableStart, final int drawableEnd) {
    if (button != null) {
      button.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableStart, 0, drawableEnd, 0);
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

如何在 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" />
Run Code Online (Sandbox Code Playgroud)