在textview中更改可绘制图像的重力

Posted

技术标签:

【中文标题】在textview中更改可绘制图像的重力【英文标题】:Change gravity of image drawable in textview 【发布时间】:2017-07-17 19:07:01 【问题描述】:

我在 TextView 中添加了图像 Drawable start。问题是我无法在 TextView 中控制 Drawable 的重力

我需要达到的目标

到目前为止我的成就

这是我的文本视图

        <TextView
            android:id="@+id/tv_8_digit_check"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:drawablePadding="@dimen/dimen_4"
            android:drawableStart="@drawable/ic_validate"
            android:text="@string/at_least_8_characters_txt"
            android:textColor="@color/white_trans"
            android:textSize="12sp" />

关于如何将 Drawable 的重力设置为顶部/开始的任何建议?谢谢

【问题讨论】:

【参考方案1】:

    尝试使用android:gravity="top"

    如果它不起作用,那么像这样使用负边距

    android:drawablePadding="-20sp"

    另一种方法是在旁边加上ImageView TextViewLinearLayout 里面,这样你就可以应用重力了

【讨论】:

重力顶部在我的情况下不起作用。关于填充,我已经必须为其他目的分配一些填充。 然后去第三个想法 是的,最终做第三个解决方案。我知道该解决方案,但我认为有人可能对此有更好的解决方案。谢谢【参考方案2】:

使用 checkbox 代替 textview Drawable,并在可以使用此图像的地方添加自定义 drawable

【讨论】:

你可以更改 CheckBox drawable android:button="@drawable/your_drawable" android:gravity="top" android:paddingLeft="6dp"【参考方案3】:

我建议你把图片放到 imageview 中。将 imageview 和 textview 放在 Linearlayout 中,并将重力设置为top。也减小文本和图像的大小。

【讨论】:

【参考方案4】:
<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:gravity="top">

    <ImageView
        android:layout_
        android:layout_
        android:layout_marginRight="@dimen/dimen_4"
        android:src="@drawable/ic_validate"/>
    <TextView
        android:id="@+id/tv_8_digit_check"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:text="@string/at_least_8_characters_txt"
        android:textColor="@color/white_trans"
        android:textSize="12sp" />

</LinearLayout>

【讨论】:

我知道这个解决方案会奏效。但问题是嵌套布局。和视图优化,如果它是为了在布局中添加另一个视图,为什么 android 构建复合可绘制对象以设置在同一个 TextView 中? 通常当文本很短时,复合可绘制是个好主意,但是当你想要自定义的东西时它就无济于事了。你可以设置 android:maxLines="1" 并减小文本大小,但是在小屏幕上可能会导致问题。 你也可以在主TextView下为“Character”创建额外的TextView【参考方案5】:

使用复选框而不是 textview 并禁用该视图的单击和焦点

<CheckBox
        android:gravity="top"
        android:button="@drawable/ic_right_managed"
        android:clickable="false"
        android:focusable="false"
        text="I look like a check box but beware I'm not"/>

【讨论】:

以上是关于在textview中更改可绘制图像的重力的主要内容,如果未能解决你的问题,请参考以下文章

Android TextView 可绘制,更改可绘制和文本之间的填充?

合并/转换textview与/到drawable

仅为 TextView 复合可绘制对象实现 onClick

视图中背景可绘制图像的不透明度(使用 XML 布局)

自定义视图中相对布局内的文本视图未正确应用重力?

如何在 xml 中的可绘制对象上获得重力“底部”