圆形文字视图,如Google Messenger

时间:2015-01-05 22:02:50

标签: android

我想在Google圈子中完全按照Google Messenger的方式显示圈子内的字母,如下所示:

Google Messenger circular text views

我尝试使用这个可绘制文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
android:shape="oval">
<corners android:radius="10dip"/>
<stroke android:color="@color/primary_color" android:width="2dip"/>
<solid android:color="@color/primary_color"/>

作为文本视图的背景,但这是灾难性的错误。有什么想法吗?

4 个答案:

答案 0 :(得分:8)

这就是我想出来的。

我使用了TextViewlayer-list背景。背景符合加载视图的大小,因此为了得到一个圆圈,您可以强制TextView具有相同的宽度和高度。

<TextView
    android:id="@+id/view"
    android:layout_width="65dp"
    android:layout_height="65dp"
    android:gravity="center"
    android:textSize="40dp"
    android:fontFamily="sans-serif-thin"
    android:background="@drawable/background"
    android:text="A"/>

我有硬编码的文本,大小,宽度和高度,但您可以在运行时管理它们。 fontFamily="sans-serif-thin"允许您使用可能更好的瘦字体(如果可用)。图层列表:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="1dp">
        <shape android:shape="oval" >
            <solid android:color="#321a1a1a"/>
        </shape>
    </item>
    <item
        android:top="1dp"
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp">
        <shape android:shape="oval" >
            <solid android:color="@color/red_700"/>
        </shape>
    </item>
</layer-list>

第一项是显示假影,但你可以摆脱它。此外,您可以删除其偏移量android:top="1dp"。这样你将在外面有一个圆形的1dp环(现在阴影仅在底部和两侧投射)。

同样,我有硬编码的颜色,但你可以改变你想要的。

答案 1 :(得分:8)

你几乎接近回答。

在drawable文件夹下创建一个可绘制的资源文件: circular_textview.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#4286F5"/>

将此drawable设置为textView的背景。

<TextView
    android:layout_width="55dp"
    android:layout_height="55dp"
    android:text="C"
    android:fontFamily="sans-serif-thin"
    android:textColor="#FFF"
    android:textSize="32sp"
    android:gravity="center"
    android:id="@+id/textView"
    android:background="@drawable/circular_textview"/>

那是

enter image description here

答案 2 :(得分:1)

试试这种方式。 路径res / drawable / oval.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
    android:startColor="#FFFF0000"
    android:endColor="#80FF00FF"
    android:angle="45"/>
<padding android:left="7dp"
    android:top="7dp"
    android:right="7dp"
    android:bottom="7dp" />
<corners android:radius="8dp" />
</shape>

此代码获取您的textview并将形状应用为背景:

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

来自:http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

答案 3 :(得分:0)

迟到但并非最不重要。 我建议我在Amulya Khare的一个项目中使用的东西。

https://github.com/amulyakhare/TextDrawable