web-dev-qa-db-ja.com

TextViewの周囲に枠線/アウトラインを配置する、より簡単でより良い方法はありますか?

そのため、周囲にクールな境界線を持つ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 ... />を形状に含めることで、アウトラインを実現できるようです。

27
jbranchaud

<stroke>セクションを追加すると、おそらく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>
38
Ted Hopp

なぜsolidの代わりにstrokeを試してみませんか?

Shape Drawable によると、次のようなことができます:

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

の代わりに <solid/>そして、それをTextViewバックグラウンドとして設定します。

3
Matthew Willis