【问题标题】:Button view with drawableLeft带有drawableLeft的按钮视图
【发布时间】:2017-04-02 01:57:58
【问题描述】:

我需要向我的按钮添加 drawable 并向其添加 drawableLeft。如果按钮的宽度设置为 wrap_content,那么一切都很好并且看起来不错。但是,如果我为按钮设置自定义宽度,则 drawableLeft 图像会从按钮的标题移到按钮的左边缘。这是android中的某种设计错误吗?如何解决此问题以让按钮在自定义宽度上看起来相同?

问候, 恶人

【问题讨论】:

    标签: android button drawable


    【解决方案1】:

    似乎drawableLeft 的 x 位置取决于左填充和 x 滚动位置:source。所以这是设计行为。我认为您最好使用SpannableStringImageSpan 类在按钮文本的左侧显示图像:

    final SpannableStringBuilder builder = new SpannableStringBuilder("\uFFFC");
    builder.setSpan(new ImageSpan(getResources.getDrawable(R.drawable.your_drawable)),
        0, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    builder.append(getString(R.string.your_string));
    textView.setText(builder);
    

    另外,您可以使用 Html.fromHtml() 方法从 HTML 构建 Spannable。但是这种情况下需要实现Html.ImageGetter接口来从资源中加载图片。

    编辑:有一种方法可以只使用 XML 来制作类似按钮的小部件:

    <LinearLayout
      android:layout_width="200dip"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:clickable="true"
      android:focusable="true"
      android:background="@android:drawable/btn_default">
    
      <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:duplicateParentState="true"
        android:src="@drawable/button_icon"/>
      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:duplicateParentState="true"
        android:text="@string/button_text"/>
    </LinearLayout>
    

    【讨论】:

    • 我在答案中添加了一些信息。
    • 我可以在我的设计 XML 中以某种方式做到这一点吗?
    • 我不知道在 XML 中执行此操作的任何方法。但我添加了一段代码,可以帮助您使用 XML 做类似的事情。
    【解决方案2】:

    只需将android:gravity="center_vertical" 设置为您的按钮属性即可。

        <Button
            android:id="@+id/button_id"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/ic_btn_icon"
            android:drawablePadding="5dp"
            android:text="Button"
            android:gravity="center_vertical" />
    

    【讨论】:

      【解决方案3】:

      我刚刚遇到这个问题,但我发现你只需要设置 android:padding 到按钮。这样你就可以将图片从按钮的左侧推开。检查此代码:

      `<Button
              android:id="@+id/button1"
              android:layout_width="170dp"
              android:layout_height="50dp"
              android:layout_below="@+id/txt1"
              android:layout_centerHorizontal="true"
              android:layout_marginTop="12dp"
              android:background="@drawable/button"
              android:drawableLeft="@drawable/icon"
              android:drawablePadding="20dp"
              android:minHeight="40dp"
              android:onClick="onClick"
              android:padding="40dp"
              android:text="@string/string1"
              android:textSize="16sp" />`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多