是否有更简单/更好的方法在TextView周围放置边框/轮廓?

时间:2011-03-10 01:54:36

标签: android xml textview border android-ui

所以我想要一个带有很酷边框的TextView。我找不到任何标准的方法,所以我提出了这个:

@ drawable / custom_bg_1:蓝色圆角形状

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#439CC8"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
</shape>

@ drawable / custom_bg_2:白色圆形

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
</shape>

myactivity.xml:活动的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:padding="15dp" >

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="2dp"
    android:background="@drawable/custom_bg_1" >

      <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        android:text="@string/curr_loc"
        android:textSize="15sp"
        android:background="@drawable/custom_bg_2" />

  </LinearLayout>
</Linearlayout>

结果:

picture of blue border

我在这里做的是将蓝色形状背景内的白色形状背景重叠,以产生蓝色边框的效果。我无法想象这是获得这种效果的最佳方式。我已经看到其他帖子尝试解决此问题,例如thisthis,但我觉得它们与我的实现一样多。

有没有更好的方法或更简单的方法来简单地在某些视图(例如TextView)周围放置边框,还是应该坚持我的方式?


修改

我将custom_bg_2.xml更改为如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="2dp" android:color="#000000"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
</shape>

现在我得到了这个结果:

blue and black border

看起来我可以通过在形状中包含<stroke ... />来实现轮廓。

2 个答案:

答案 0 :(得分:38)

如果你添加一个&lt; stroke&gt;,你可以使用custom_bg_2。部分:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
    <stroke android:color="#439CC8" android:width="2dp" />
</shape>

答案 1 :(得分:3)

为什么不尝试描边而不是实体

根据Shape Drawable,您可以执行以下操作:

<stroke android:width="2dp" android:color="#439CC8"/>

而不是<solid/>,然后将其设置为TextView背景。