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

时间:2014-04-25 17:34:02

标签: 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">
            <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>

2 个答案:

答案 0 :(得分:7)

不,你不能这样做。一个想法是将Drawable设置为TextView的背景,然后只需在TextView中设置文本,该文本将显示在Drawable的其他图层上方。当然,这不能用于启动画面,这需要zyamys在下面的评论中提到的可绘制资源。对于这种情况的一个想法是使用您感兴趣的文本生成静态图像。遗憾的是,这不包括文本是动态的情况。

答案 1 :(得分:3)

您可以使用矢量drawable(例如通过从svg文件转换) 然后使用矢量作为其中一个层 这使您可以在没有任何TextView的情况下创建单个drawable,因此您可以轻松地将其用作启动画面主题中的windowBackground。

<?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>

其中 ic_splash_text - 是一个可用文本绘制的矢量。

如果您要定位到API&lt; 21,请不要忘记添加矢量支持。 为此你必须:

  1. 添加到您的模块build.gradle(app-level):

    android {        
        vectorDrawables.useSupportLibrary = true.    
    }  
    
  2. 在您的活动的静态块中注册委托:

    static {  
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);   
    }