icon Android材質設計按鈕樣式



android material button icon size (8)

借助新的支持庫28.0.0-alpha1版本 ,設計庫現在包含Material Button

您可以將此按鈕添加到我們的佈局文件中:

<android.support.design.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="YOUR TEXT"
    android:textSize="18sp"
    app:icon="@drawable/ic_android_white_24dp" />

默認情況下,此類將使用主題的重音顏色作為填充背景顏色的按鈕,以及用於按鈕文本顏色的白色。

您可以使用以下屬性自定義按鈕:

  • app:rippleColor :用於按鈕紋波效果的顏色
  • app:backgroundTint :用於將色調應用於按鈕的背景。 如果您想更改按鈕的背景顏色,請使用此屬性而不是背景。

  • app:strokeColor :用於按鈕描邊的顏色

  • app:strokeWidth :用於按鈕描邊的寬度
  • app:cornerRadius :用於定義用於按鈕角落的半徑

我對材質設計的按鈕樣式感到困惑。 我希望在附加鏈接中看到色彩鮮豔的凸起按鈕,例如在用法部分中看到的“強制停止”和“卸載”按鈕。 有沒有可用的樣式,還是我需要定義它們?

http://www.google.com/design/spec/components/buttons.html#buttons-usage

我找不到默認的按鈕樣式。

例:

 <Button style="@style/PrimaryButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Calculate"
    android:id="@+id/button3"
    android:layout_below="@+id/editText5"
    android:layout_alignEnd="@+id/editText5"
    android:enabled="true" />

如果我嘗試通過添加更改按鈕的背景顏色

    android:background="@color/primary"

所有的風格都會消失,比如觸摸動畫,陰影,圓角等等。


Answer #1

我嘗試了很多答案和第三方庫,但沒有一個是保持邊界,並提高了對棒棒糖的影響,同時對棒棒糖產生連鎖反應而沒有缺點。 這是我最終的解決方案,結合了幾個答案(由於灰度顏色深度,邊框/凸起不能很好地呈現在gif上):

棒糖

預棒棒糖

的build.gradle

compile 'com.android.support:cardview-v7:23.1.1'

layout.xml

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card"
    card_view:cardElevation="2dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardMaxElevation="8dp"
    android:layout_margin="6dp"
    >
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="0dp"
        android:background="@drawable/btn_bg"
        android:text="My button"/>
</android.support.v7.widget.CardView>

可繪製-V21 / btn_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="?attr/colorPrimary"/>
</ripple>

繪製/ btn_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/colorPrimaryDark" android:state_pressed="true"/>
    <item android:drawable="@color/colorPrimaryDark" android:state_focused="true"/>
    <item android:drawable="@color/colorPrimary"/>
</selector>

活動的onCreate

    final CardView cardView = (CardView) findViewById(R.id.card);
    final Button button = (Button) findViewById(R.id.button);
    button.setOnTouchListener(new View.OnTouchListener() {
        ObjectAnimator o1 = ObjectAnimator.ofFloat(cardView, "cardElevation", 2, 8)
                .setDuration
                        (80);
        ObjectAnimator o2 = ObjectAnimator.ofFloat(cardView, "cardElevation", 8, 2)
                .setDuration
                        (80);

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    o1.start();
                    break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    o2.start();
                    break;
            }
            return false;
        }
    });

Answer #2

我剛剛創建了一個android庫,它允許您輕鬆修改按鈕顏色和紋波顏色

https://github.com/xgc1986/RippleButton

<com.xgc1986.ripplebutton.widget.RippleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btn"
    android:text="Android button modified in layout"
    android:textColor="@android:color/white"
    app:buttonColor="@android:color/black"
    app:rippleColor="@android:color/white"/>

您不需要為每個想用不同顏色的按鈕創建樣式,以便隨意自定義顏色


Answer #3

您可以通過向其添加z軸來為航圖提供視圖,並且可以具有默認陰影。 此功能在L預覽中提供,並在發布後可用。 現在你可以簡單地添加一個圖像來為按鈕背景賦予這個外觀


Answer #4

1)您可以通過定義xml drawable來創建圓角按鈕 ,並且可以增加或減小半徑以增加或減少按鈕角的圓度。 將這個xml drawable設置為按鈕的背景。

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="4dp"
    android:insetTop="6dp"
    android:insetRight="4dp"
    android:insetBottom="6dp">
    <ripple android:color="?attr/colorControlHighlight">
        <item>
            <shape android:shape="rectangle"
                android:tint="#0091ea">
                <corners android:radius="10dp" />
                <solid android:color="#1a237e" />
                <padding android:bottom="6dp" />
            </shape>
        </item>
    </ripple>
</inset>

2)要更改按鈕狀態之間的默認陰影和陰影過渡動畫,您需要使用android:stateListAnimator屬性定義選擇器並將其應用於按鈕。 有關完整的按鈕自定義參考: http://www.zoftino.com/android-buttonhttp://www.zoftino.com/android-button


Answer #5

這是我得到我想要的。

首先,製作一個按鈕(在styles.xml ):

<style name="Button">
    <item name="android:textColor">@color/white</item>
    <item name="android:padding">0dp</item>
    <item name="android:minWidth">88dp</item>
    <item name="android:minHeight">36dp</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:elevation">1dp</item>
    <item name="android:translationZ">1dp</item>
    <item name="android:background">@drawable/primary_round</item>
</style>

該按鈕的漣漪和背景,作為可繪製的primary_round.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/primary_600">
  <item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="1dp" />
        <solid android:color="@color/primary" />
    </shape>
  </item>
</ripple>

這增加了我期待的連鎖反應。


Answer #6

這裡有一個示例有助於在應用程序中一致地應用按鈕樣式。

以下是我用於特定樣式的示例主題..

<style name="MyTheme" parent="@style/Theme.AppCompat.Light">
   <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:buttonStyle">@style/ButtonAppTheme</item>
</style>
<style name="ButtonAppTheme" parent="android:Widget.Material.Button">
<item name="android:background">@drawable/material_button</item>
</style>

這是我如何定義res / drawable-v21文件夾中的按鈕形狀和效果......

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
  <item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
      <corners android:radius="2dp" /> 
      <solid android:color="@color/primary" />
    </shape>
  </item>
</ripple>

2dp的角落是為了保持與材質主題一致。


Answer #7

如果我正確理解你,你想要做這樣的事情:

在這種情況下,它應該足以使用:

<item name="android:colorButtonNormal">#2196f3</item>

或者對於API小於21:

<item name="colorButtonNormal">#2196f3</item>

除了使用材料主題教程

動畫變體在here





material