Android 可绘制资源中具有形状的文本

Android 可绘制资源中具有形状的文本,android,text,resources,drawable,shape,Android,Text,Resources,Drawable,Shape,我可以在可绘制资源中创建文本形状吗? 我在谷歌上搜索了很多,但什么也没找到。。。 这是我的可绘制文件: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="oval">

我可以在可绘制资源中创建文本形状吗? 我在谷歌上搜索了很多,但什么也没找到。。。 这是我的可绘制文件:

<?xml version="1.0" encoding="utf-8"?>
   <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item>
         <shape android:shape="oval">
            <stroke android:width="3dp" android:color="#QQffQQ"/>
            <size android:width="120dp" android:height="120dp"/>
         </shape>
      </item>
      <item android:right="59dp" android:left="59dp">
         <shape android:shape="rectangle">
            <solid android:color="£22££20"/>
         </shape>
      </item>
      <item android:top="59dp" android:bottom="59dp">
         <shape android:shape="rectangle">
            <solid android:color="£20££20"/>
         </shape>
      </item>
      <item>
         <!--text should be here-->
      </item>
   </layer-list>


不,您不能这样做。一种方法是将
可绘制
设置为
文本视图
的背景,然后只需在
文本视图
中设置文本,该文本将显示在
可绘制
的其他层之上。当然,这不能用于初始屏幕,它需要一个可绘制的资源,如下面的评论中所述。这种情况下的一个想法是用您感兴趣的文本生成静态图像。不幸的是,这不包括文本是动态的情况。

您可以使用vector drawable(例如,通过从svg文件转换)。
然后将vector用作其中一个层。
这使您可以创建一个不带任何文本视图的可绘制文件,因此您可以轻松地将其用作启动屏幕主题中的窗口背景。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
               android:shape="rectangle">
            <gradient android:angle="270"
                      android:startColor="#C3DAE0"
                      android:endColor="#FFFFFF"
                      android:type="linear"/>
        </shape>
    </item>
    <item
        android:gravity="center"
        android:drawable="@drawable/ic_splash_text"/>
</layer-list>
  • 在活动的静态块中注册代理:

    static {  
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);   
    }    
    

  • 为什么不使用文本视图?因为OP可能希望在启动屏幕中使用文本,而启动屏幕需要可绘制资源,而不是布局资源。或者他们可能希望将可绘制资源与包含一些文本的TransitionDrawable一起使用,以便交叉淡入淡入淡入淡入淡入淡入淡出淡入淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡出淡。您可以切换到图像,但这会妨碍可绘制层列表的使用。@zyamys您在上述场景中的建议是什么,即启动屏幕中的文本需要可绘制资源?@user846316我没有一个好的答案。我最终用我的文本生成了png文件。@zyamys我也想过这样做,但是png中的本地化文本很痛苦。。。不能只为splash创建这么多图像:(这是一个很好的答案-您可能还需要将文本转换为SVG中的路径,因为矢量绘图无法处理文本
    static {  
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);   
    }