【问题标题】:How to set a drawable to a TextView's text?如何将可绘制对象设置为 TextView 的文本?
【发布时间】:2013-04-01 03:22:23
【问题描述】:

小问题:

假设我有一个 TextView,并且我希望文本本身(不是背景)将有一个可绘制设置(而不仅仅是纯色),我应该怎么做?

我找到的唯一解决方案是 this one ,但它仅适用于渐变色,我希望能够使用任何可绘制对象。

【问题讨论】:

    标签: android text textview android-drawable


    【解决方案1】:

    好的,我想我已经找到了一个可能的解决方案,但我对此有一些注意事项:

    1. 它不适用于任何可绘制对象。它是用于位图的,因此您需要以某种方式将其转换为位图。

    2. 它要求你知道textView的大小(你可以使用this来达到这个目的)

    3. 它要求您有足够的内存来存储与 textView 大小相同的缩放位图。

    4. 不确定如何使其按字符或按行工作。

    代码如下:

    public static void setBitmapOnTextView(final TextView tv, final Bitmap bitmap) {
        final TileMode tile_mode = TileMode.CLAMP;
        final int height = tv.getHeight();
        final int width = tv.getWidth();
        final Bitmap temp = Bitmap.createScaledBitmap(bitmap, width, height, true);
        final BitmapShader bitmapShader = new BitmapShader(temp, tile_mode, tile_mode);
        tv.getPaint().setShader(bitmapShader);
    }
    

    希望有更好的解决方案。

    【讨论】:

      【解决方案2】:

      已编辑:

      我认为不可能更改文本上使用的实际笔划,您可能拥有的最接近的最佳选择是使用不同的字体。

      在 android 中,您可以使用任何 *.ttf 字体“绘制”任何文本。

      为此,您必须将文件包含在您的资产文件夹中并从代码中调用(也许有一种使用 XML 的方法,但我不知道如何):

      TypeFace mFont = TypeFace.createFromAsset(mContext.getAssets(), "my_font.ttf");
      mTextView.setTypeFace(mFont);
      

      我认为你会在文本上获得不同的笔触。

      原答案:

      TextView 具有以下属性:

      Drawable Top
      Drawable Bottom
      Drawable Left
      Drawable Right
      

      您在 XML 上设置的。或者你可以打电话

      setCompoundDrawables(left, top, right, bottom)
      

      来自代码!

      【讨论】:

      • 我相信“android 开发者”想要问的是,textview 本身的文本的字体/笔画需要使用可绘制对象来制作。您建议的解决方案会在文本周围放置可绘制对象,但不能解决所要求的问题。
      • @mastDrinkNimbuPani 是的,这是正确的。我不想要与文本周围的可绘制对象相关的任何内容,文本应该是具有可绘制对象的文本。就像为文本设置纹理一样。一件好事可能是渐变,但我也希望能够使用图像。
      • oohh.....我没有正确理解这个问题。我将编辑答案,请检查。
      • @Budius 使用 ttf 字体允许您通过编辑字体本身来准确设置您希望如何显示每个字符?如果是这样,我不知道它(确定它总是黑白“模板”)。但是,这仍然不是我所要求的。顺便说一句,当您编辑答案时,请发表任何评论,以便通知更改。
      • 我之前从未创建过字体(只需从设计部门获得),但我认为可以(fontforge.org)。我确实发表了一条评论,提到了我的编辑,它在你的评论之上,10-Apr 12h10m
      猜你喜欢
      • 2017-07-05
      • 2016-02-21
      • 2013-01-14
      • 2012-09-09
      • 1970-01-01
      • 2019-11-21
      • 2015-09-19
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多