Android TextView drawable居中

Android TextView drawable居中
在Android开发中,TextView是我们经常使用的一个UI控件,常用于显示文本内容。除了文本内容,TextView还可以显示图片,通过drawable属性来实现。然而,有时候我们会遇到一个问题,就是当我们同时设置了文本和图片时,图片的位置可能不是我们期望的居中位置。本文将介绍如何实现在TextView中居中显示drawable。

问题描述
在默认情况下,当我们在TextView中设置了drawable时,drawable会出现在文本的左侧。这在某些情况下可能不是我们期望的效果。例如,我们希望在一个按钮上显示一个图标,并使其居中显示。此时,默认的效果会让图标在按钮的左侧,不够美观。

解决方法
要实现drawable的居中显示,我们可以使用以下两种方法:使用drawablePadding属性或自定义一个居中的Drawable。

方法一:使用drawablePadding属性
TextView提供了一个drawablePadding属性,用于设置drawable与文本之间的间距。默认情况下,这个间距是0。我们可以通过设置一个合适的间距值,来实现drawable的居中显示。

下面是一个示例代码:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/icon"
    android:drawablePadding="10dp"
    android:text="Button"
    android:padding="10dp"/>

在上述代码中,我们通过设置drawablePadding属性为10dp,来使得图标与文本之间有一个间距。这样就能够实现图标居中显示的效果。

方法二:自定义一个居中的Drawable
如果我们想要更加灵活地控制drawable的位置,可以自定义一个居中的Drawable。这种方法需要我们自己创建一个Drawable类,并重写其draw方法来实现居中的效果。

下面是一个示例代码:

public class CenterDrawable extends Drawable {

    private Drawable mDrawable;

    public CenterDrawable(Drawable drawable) {
        mDrawable = drawable;
    }

    @Override
    public void draw(Canvas canvas) {
        int drawableWidth = mDrawable.getIntrinsicWidth();
        int drawableHeight = mDrawable.getIntrinsicHeight();

        int left = (canvas.getWidth() - drawableWidth) / 2;
        int top = (canvas.getHeight() - drawableHeight) / 2;
        int right = left + drawableWidth;
        int bottom = top + drawableHeight;

        mDrawable.setBounds(left, top, right, bottom);
        mDrawable.draw(canvas);
    }

    @Override
    public void setAlpha(int i) {
    }

    @Override
    public void setColorFilter(@Nullable ColorFilter colorFilter) {
    }

    @Override
    public int getOpacity() {
        return PixelFormat.UNKNOWN;
    }
}

在上述代码中,我们创建了一个CenterDrawable类,继承自Drawable。在draw方法中,我们首先获取了drawable的宽度和高度,然后计算出居中的坐标,最后通过设置drawable的边界和调用draw方法来实现居中显示的效果。

使用这个自定义的Drawable,我们可以在TextView中进行如下设置:

Drawable icon = getResources().getDrawable(R.drawable.icon);
CenterDrawable centerDrawable = new CenterDrawable(icon);
textView.setCompoundDrawablesWithIntrinsicBounds(centerDrawable, null, null, null);

通过以上代码,我们将自定义的居中Drawable应用到TextView中,从而实现了drawable的居中显示。

序列图
下面是一个使用drawablePadding属性的序列图:

通过设置drawablePadding属性,TextView会重新绘制,从而实现了drawable的居中显示。

饼状图
下面是一个使用自定义Drawable的饼状图:

在这个饼状图中,文本和图标所占的比例分别为40%和60%。可以看到,图标所占比例更大,符合我们要实现的居中显示效果。

下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/21853,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?