如何使用 Span 提升特定角色的位置?

Posted

技术标签:

【中文标题】如何使用 Span 提升特定角色的位置?【英文标题】:How can I raise up the position of a particular character with Span? 【发布时间】:2021-09-19 11:42:27 【问题描述】:

有一个简单的字符。 “你好→世界!!!”

很高兴在 XML 设计选项卡中看到它。没有错。

但是当我运行应用程序时,箭头位于 TextView 的基线处。

这是一个 xml 代码和设计选项卡。

以及我运行此应用时的结果。

我不明白结果如何。

所以我想把箭头放在中间,就像我在 XML 设计选项卡中看到的那样。

我该怎么做?我可以使用 Spannable 吗?还是什么??

【问题讨论】:

【参考方案1】:
    TextView 可以使用 android:gravity="center_vertical|left" 这里有一个技巧可以帮助您:您可以包含一个特殊的图像 字符并将该图像插入到输出文本中。

首先,在res/drawable中添加一个新的Drawable资源文件(ic_arrow.xml),复制粘贴进去。

<vector android:alpha="0.78" android:
  android:viewportHeight="24.0" android:viewportWidth="24.0"
  android: xmlns:android="http://schemas.android.com/apk/res/android">
  <path android:fillColor="#FF000000" android:pathData="M3,12L21.5,12"
    android:strokeColor="#000000" android:strokeWidth="1"/>
  <path android:fillColor="#FF000000" android:pathData="M21,12L17,8"
    android:strokeColor="#000000" android:strokeWidth="1"/>
  <path android:fillColor="#FF000000" android:pathData="M21,12L17,16"
    android:strokeColor="#000000" android:strokeWidth="1"/>
</vector>

向活动添加代码。

    TextView textView = findViewById(R.id.my_text_view);

    Drawable arrow = ContextCompat.getDrawable(this, R.drawable.ic_arrow);
    Float ascent = textView.getPaint().getFontMetrics().ascent;
    int h = (int) -ascent;
    arrow.setBounds(0,0,h,h);

    SpannableString stringWithImage = new SpannableString("A*B");
    stringWithImage.setSpan(new ImageSpan(arrow, DynamicDrawableSpan.ALIGN_BASELINE), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(stringWithImage);  

它是这样工作的。

【讨论】:

以上是关于如何使用 Span 提升特定角色的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何高度限制具有“特定角色”的用户从“某个地方”访问应用程序?

如何使用jquery选择不是特定元素子元素的元素?

无论屏幕大小如何,都使用 CSS 修复 DIV 内的 SPAN 位置

如何在 Selenium 中找到具有特定文本的跨度? (使用 Java)

如何仅使用 discordjs v12 存储具有特定角色的成员的所有数据

如何使用mongodb使用特定键加入多个集合?