web-dev-qa-db-ja.com

Android - ボタンの境界線

ボタンに境界線を追加する方法画像の使用に頼らずにこれを行うことは可能ですか?

191
jeffreyveon

ステップ1:my_button_bg.xmlという名前のファイルを作成します。

ステップ2:このファイルをres/drawables.xmlに配置します。

ステップ3:コードの下に挿入

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:shape="rectangle">
  <gradient Android:startColor="#FFFFFF" 
    Android:endColor="#00FF00"
    Android:angle="270" />
  <corners Android:radius="3dp" />
  <stroke Android:width="5px" Android:color="#000000" />
</shape>

ステップ4:必要に応じてコード "Android:background =" @ drawable/my_button_bg "を使用します。

<Button
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Your Text"
    Android:background="@drawable/my_button_bg"
    />
388
Pedantic

あなたのdrawableフォルダにbutton_border.xmlファイルを作成してください。

res/drawable/button_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <solid Android:color="#FFDA8200" />

    <stroke
        Android:width="3dp"
        Android:color="#FFFF4917" />

</shape>

そして、あなたのXMLアクティビティレイアウトにボタンを追加して背景Android:background="@drawable/button_border"を設定します。

        <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/button_border"
                Android:text="Button Border" />
32
Karina Sen

Android Official Solution

Android Design Support v28が導入されたので、 MaterialButton を使用して境界付きボタンを簡単に作成できます。このクラスは、コンストラクタのボタンに更新されたMaterialスタイルを提供します。 app:strokeColorapp:strokeWidthを使って、次のようにカスタムボーダーを作成できます。

build.gradle

dependencies {
    implementation 'com.Android.support:design:28.0.0'
}

style.xml

アプリケーションのテーマがTheme.MaterialComponentsではなくTheme.AppCompatから継承されていることを確認してください。

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <!-- Customize your theme here. -->
</style>

•罫線付きボタン:

<Android.support.design.button.MaterialButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="MATERIAL BUTTON"
    Android:textSize="15sp"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />

•枠なしボタン:

<Android.support.design.button.MaterialButton
    style="@style/Widget.AppCompat.Button.Borderless"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="UNFILLED MATERIAL BUTTON"
    Android:textColor="@color/green"
    Android:textSize="15sp"
    app:backgroundTint="@color/transparent"
    app:cornerRadius="8dp"
    app:rippleColor="#33AAAAAA"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />

視覚的結果

enter image description here

24
aminography

描画可能図形の作成についてはこちらをご覧ください http://developer.Android.com/guide/topics/resources/drawable-resource.html#Shape

これが完了したら、ボタンセットのXMLでAndroid:background="@drawable/your_button_border"

17
dymmeh

drawable/button_green.xmlを作成します。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:shape="rectangle">
  <gradient
    Android:startColor="#003000"
    Android:centerColor="#006000"
    Android:endColor="#003000"
    Android:angle="270" />
  <corners Android:radius="5dp" />
  <stroke Android:width="2px" Android:color="#007000" />
</shape>

そしてそれを@drawable/button_greenとして指摘してください:

<Button
        Android:id="@+id/button1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_margin="10dp"
        Android:background="@drawable/button_green"
        Android:text="Button" />
13
vitperov

ボタンに透明な背景が必要ない場合は、フレームレイアウトを使用して境界線のような錯覚を作り出すことができます。 FrameLayoutの "padding"属性を調整してボーダーの太さを変更するだけです。

<FrameLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:padding="1sp"
        Android:background="#000000">
        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Your text goes here"
            Android:background="@color/white"
            Android:textColor="@color/black"
            Android:padding="10sp"
            />
</FrameLayout>

シェイプXMLファイルに動的に編集可能な境界線の色があるかどうかわかりません。しかし、私はこの解決策では、FrameLayoutの背景を設定することによって境界の色を動的に変更できることを知っています。

5
Rock Lee

私は1年近く遅れていることを知っていますが、あなたは9パスの画像を作成することもできます。このような画像の作成に役立つAndroid SDKに付属のツールがあります。このリンクを参照: http://developer.Android.com/ tools/help/draw9patch.html

シモンズ:画像も同様に無限に拡大縮小することができます

5
himura

あなたのXMLレイアウトでは:

<Button
    Android:id="@+id/cancelskill"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="25dp"
    Android:layout_weight="1"
    Android:background="@drawable/button_border"
    Android:padding="10dp"
    Android:text="Cancel"
    Android:textAllCaps="false"
    Android:textColor="#ffffff"
    Android:textSize="20dp" />

描画可能フォルダに、ボタンの境界線スタイルのファイルを作成します。

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >
    <stroke
        Android:width="1dp"
        Android:color="#f43f10" />
</shape>

そしてあなたの活動の中で:

    GradientDrawable Gd1 = new GradientDrawable();
    Gd1.setColor(0xFFF43F10); // Changes this drawbale to use a single color instead of a gradient
    Gd1.setCornerRadius(5);
    Gd1.setStroke(1, 0xFFF43F10);

    cancelskill.setBackgroundDrawable(Gd1);

    cancelskill.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            cancelskill.setBackgroundColor(Color.parseColor("#ffffff"));
            cancelskill.setTextColor(Color.parseColor("#f43f10"));

            GradientDrawable Gd = new GradientDrawable();

            Gd.setColor(0xFFFFFFFF); // Changes this drawbale to use a single color instead of a gradient
            Gd.setCornerRadius(5);
            Gd.setStroke(1, 0xFFF43F10);
            cancelskill.setBackgroundDrawable(Gd);

            finish();
        }
    });
4
Raseem Ayatt