Style Przycisków Android Material Design

Jestem zdezorientowany co do stylów guzików do projektowania materiałów. Chciałbym dostać kolorowe podniesione guziki jak w załączonym linku. podobnie jak przyciski" force stop "I" uninstall " widoczne w sekcji użycie. Czy są dostępne style, czy muszę je zdefiniować?

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

Nie mogłem znaleźć domyślnych stylów przycisków.

Przykład:

 <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" />

Jeśli spróbuję zmienić tło kolor przycisku przez dodanie

    android:background="@color/primary"

Wszystkie style znikają, takie jak animacja dotykowa, Cień, zaokrąglony róg itp.

Author: Braiam, 2014-10-13

11 answers

Dodam swoją odpowiedź, ponieważ nie używam żadnej z innych odpowiedzi podanych.

Z biblioteką wsparcia v7, wszystkie style są już zdefiniowane i gotowe do użycia, dla standardowych przycisków wszystkie te style są dostępne:

style="@style/Widget.AppCompat.Button"
style="@style/Widget.AppCompat.Button.Colored"
style="@style/Widget.AppCompat.Button.Borderless"
style="@style/Widget.AppCompat.Button.Borderless.Colored"

Widget.AppCompat.Button: Tutaj wpisz opis obrazka

Widget.AppCompat.Button.Colored: Tutaj wpisz opis obrazka

Widget.AppCompat.Button.Borderless Tutaj wpisz opis obrazka

Widget.AppCompat.Button.Borderless.Colored: Tutaj wpisz opis obrazka


Aby odpowiedzieć na pytanie, styl do użycia jest zatem

<Button style="@style/Widget.AppCompat.Button.Colored"
.......
.......
.......
android:text="Button"/>

Jak zmienić kolor

Dla całej aplikacji:

Kolor wszystkich kontrolek interfejsu użytkownika (nie tylko przycisków, ale także pływających przycisków akcji, pól wyboru itp.) jest zarządzany przez atrybut colorAccent jak wyjaśniono tutaj. Możesz zmodyfikować ten styl i zastosować własny kolor w definicji motywu:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="colorAccent">@color/Orange</item>
</style>

Dla konkretnego przycisku:

Jeśli chcesz zmienić styl określonego przycisku, możesz zdefiniować nowy styl, dziedziczenie jednego ze stylów nadrzędnych opisanych powyżej. W poniższym przykładzie zmieniłem tylko tło i kolory czcionki:

<style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/Red</item>
    <item name="android:textColor">@color/White</item>
</style>

Następnie wystarczy zastosować ten Nowy Styl na przycisku za pomocą:

android:theme="@style/AppTheme.Button"

Aby ustawić domyślny projekt przycisku w układzie, dodaj tę linię do stylów.motyw xml:

<item name="buttonStyle">@style/btn</item>

Gdzie @style/btn jest Twój motyw przycisku. To ustawia styl przycisków dla wszystkich przycisków w układzie z określonym motywem

 782
Author: Yoann Hercouet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-04 06:44:40

Najprostsze Rozwiązanie


Krok 1: Użyj najnowszej biblioteki wsparcia

compile 'com.android.support:appcompat-v7:25.2.0'

Krok 2: Użyj AppCompatActivity jako rodzica klasy aktywności

public class MainActivity extends AppCompatActivity

Krok 3: Użyj przestrzeni nazw aplikacji w pliku XML układu

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

Krok 4: Użyj AppCompatButton zamiast Button

<android.support.v7.widget.AppCompatButton
    android:id="@+id/buttonAwesome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Awesome Button"
    android:textColor="@color/whatever_text_color_you_want"
    app:backgroundTint="@color/whatever_background_color_you_want"/>

Tutaj wpisz opis obrazka

 89
Author: Ehtesham Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 07:10:20

Jeśli dobrze cię rozumiem, chcesz zrobić coś takiego.:
Tutaj wpisz opis obrazka

W takim przypadku powinno wystarczyć użycie:

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

Lub dla API mniej niż 21:

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

Oprócz za pomocą Material Theme Tutorial.

Animowany wariant to tutaj .

 66
Author: AlexKorovyansky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-09 17:48:52

Oto jak dostałem to, czego chciałem.

Najpierw zrobiłem guzik (w 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>

Tętnienie i tło dla przycisku, jako drawable 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>

To dodało efekt falowania, którego szukałem.

 41
Author: xsorifc28,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 14:55:36

Wraz ze stabilnym wydaniem komponentów materiałowych Androida w listopadzie 2018 r., Google przeniosło komponenty materiałowe z przestrzeni nazw android.support.design do com.google.android.material.
Biblioteka komponentów materiałowych jest zamiennikiem dla biblioteki wsparcia projektowego Androida.

Dodaj zależność do twojego build.gradle:

dependencies { implementation ‘com.google.android.material:material:1.0.0’ }

Następnie dodaj MaterialButton do układu:

<com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.OutlinedButton" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        app:strokeColor="@color/colorAccent"
        app:strokeWidth="6dp"
        app:layout_constraintStart_toStartOf="parent"
        app:shapeAppearance="@style/MyShapeAppearance"
   />

Możesz sprawdzić pełną dokumentację tutaj i API tutaj .

Aby zmienić kolor tła masz 2 opcje.

  1. używając atrybutu backgroundTint.

Coś w stylu:

<style name="MyButtonStyle"
 parent="Widget.MaterialComponents.Button">
    <item name="backgroundTint">@color/button_selector</item>
    //..
</style>
    To będzie moim zdaniem najlepsza opcja. Jeśli chcesz nadpisać niektóre atrybuty motywu z domyślnego stylu, możesz użyć nowego materialThemeOverlay atrybut.

Coś w stylu:

<style name="MyButtonStyle"
 parent="Widget.MaterialComponents.Button">
   <item name=“materialThemeOverlay”>@style/GreenButtonThemeOverlay</item>
</style>

<style name="GreenButtonThemeOverlay">
  <!-- For filled buttons, your theme's colorPrimary provides the default background color of the component --> 
  <item name="colorPrimary">@color/green</item>
</style>

Opcja # 2 wymaga 'com.google.android.material:material:1.1.0'.

Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Stara Biblioteka wsparcia:

Z nową biblioteką wsparcia 28.0.0, Biblioteka projektowania zawiera teraz MaterialButton.

Możesz dodać ten przycisk do naszego pliku układu za pomocą:

<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" />

Domyślnie ta klasa będzie używać koloru akcentu Twojego motywu dla przycisków wypełnionych kolorem tła wraz z białym dla przycisków koloru tekstu.

Możesz dostosować przycisk za pomocą atrybuty te:

  • app:rippleColor: kolor, który ma być użyty do efektu tętnienia przycisku
  • app:backgroundTint: służy do nałożenia tła przycisku. Jeśli chcesz zmienić kolor tła przycisku, użyj tego atrybutu zamiast tła.

  • app:strokeColor: kolor, który ma być użyty do obrysu przycisku

  • app:strokeWidth: szerokość używana dla skoku przycisku
  • app:cornerRadius: używane do określenia promienia używanego dla narożników button
 38
Author: Gabriele Mariotti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-30 14:25:36

Obok android.support.design.button.MaterialButton (który wspomniał Gabriele Mariotti),

Istnieje również inny Button widżet o nazwie com.google.android.material.button.MaterialButton który ma różne style i rozciąga się od AppCompatButton:

style="@style/Widget.MaterialComponents.Button"
style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
style="@style/Widget.MaterialComponents.Button.TextButton"
style="@style/Widget.MaterialComponents.Button.Icon"
style="@style/Widget.MaterialComponents.Button.TextButton.Icon"

Wypełnione, podwyższone Button (domyślnie): Tutaj wpisz opis obrazka

style="@style/Widget.MaterialComponents.Button"

Filled, unelevated Button: Tutaj wpisz opis obrazka

style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Tekst Button: Tutaj wpisz opis obrazka

style="@style/Widget.MaterialComponents.Button.TextButton"

Icon Button : Tutaj wpisz opis obrazka

style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/icon_24px" // Icons can be added from this

Tekst Button z ikoną:: Tutaj wpisz opis obrazka


Czytaj: https://material.io/develop/android/components/material-button/

Klasa wygody do tworzenia nowego przycisku materiału.

Ta klasa dostarcza zaktualizowane style materiału dla przycisku w konstruktor. Widżet wyświetli prawidłowy domyślny Materiał style bez użycia flagi stylu.

 22
Author: ʍѳђઽ૯ท,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-24 20:43:55

Oto przykład, który pomoże w konsekwentnym stosowaniu stylu przycisków w całej aplikacji.

Oto przykładowy motyw, którego użyłem z konkretnymi stylami..

<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>

Tak zdefiniowałem kształt i efekty przycisku w folderze 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>

Narożniki 2dp mają być zgodne z motywem materialnym.

 21
Author: samkya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 08:18:08

Próbowałem wiele odpowiedzi i libs stron trzecich , ale żaden nie utrzymał granicy i podniósł efekt na pre-lollipop, jednocześnie mając efekt ripple na lizaku bez wad. Oto moje ostateczne rozwiązanie łączące kilka odpowiedzi (obramowanie / podniesione nie są dobrze renderowane na gifach ze względu na głębię kolorów w skali szarości) :

Lollipop

Tutaj wpisz opis obrazka

Pre-lollipop

Tutaj wpisz opis obrazka

Buduj.gradle

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

Układ.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>

Drawable-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>

Drawable / 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>

Activity ' s 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;
        }
    });
 6
Author: Rémy DAVID,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 14:05:32

1) możesz utworzyć zaokrąglony róg przycisku definiując XML drawable i możesz zwiększyć lub zmniejszyć promień, aby zwiększyć lub zmniejszyć zaokrąglenie rogu przycisku. Ustaw ten XML drawable jako tło przycisku.

<?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>

zaokrąglony przycisk narożny

2) aby zmienić domyślną animację przejścia cienia i cienia między Stanami przycisków, należy zdefiniować Selektor i zastosować go do przycisku przy użyciu właściwości Android: stateListAnimator. Aby uzyskać pełne odniesienie do dostosowywania przycisków : http://www.zoftino.com/android-button

 4
Author: Arnav Rao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-09 06:00:03

Właśnie stworzyłem bibliotekę Androida, która pozwala łatwo modyfikować kolor przycisku i kolor tętnienia

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"/>

Nie musisz tworzyć stylu dla każdego przycisku, który chcesz mieć inny kolor, co pozwala losowo dostosować kolory

 1
Author: xgc1986,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-01 14:45:57

Możesz dodać do widoku lotnictwo dodając do niego oś z i mieć domyślny Cień. ta funkcja została udostępniona w L preview i będzie dostępna po jej wydaniu. Na razie możesz po prostu dodać obrazek, który daje to spojrzenie na tło przycisku

 0
Author: Suhail Mehta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-13 19:00:48