Am'm a confundat pe butonul stiluri de design material. Am'd place să mă colorate ridicat butoane ca în link-ul atașat., ca "forța stop" și "uninstall" butoane văzut în secțiunea de utilizare. Există stiluri disponibile sau nu am nevoie să le definim?
http://www.google.com/design/spec/components/buttons.html#buttons-usage
Nu puteam't găsi butonul implicit stiluri.
Exemplu:
<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" />
Dacă am încerca să modificați culoarea de fundal a butonului prin adăugarea
android:background="@color/primary"
toate stilurile du-te departe, cum ar fi atingerea de animație, umbra, colț rotunjit, etc.
Voi adăuga răspunsul meu, deoarece eu nu't de a folosi oricare dintre celelalte răspunsuri oferite.
Cu Sprijinul Bibliotecii v7, toate stilurile sunt de fapt deja definite și gata de utilizare, pentru butoanele standard, toate aceste stiluri sunt disponibile:
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.Buton.De culoare
:
Widget.AppCompat.Buton.Fără frontiere
Widget.AppCompat.Buton.Fără margini.De culoare
:
Pentru a răspunde la întrebarea, de stilul de a utiliza, prin urmare, este
<Button style="@style/Widget.AppCompat.Button.Colored"
.......
.......
.......
android:text="Button"/>
Pentru întreaga aplicație:
Culoarea de toate controalele UI (nu numai butoane, dar, de asemenea, butoane de acțiune plutitoare, casute etc.) este gestionat de atributul colorAccent
a explicat ca aici.
Puteți modifica acest stil și să aplice propria culoare în tema definiție:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="colorAccent">@color/Orange</item>
</style>
Pentru un buton specific:
Dacă aveți nevoie pentru a schimba stilul de un anumit buton, puteți defini un nou stil, moșteniți de la mamă stilurile descrise mai sus. În exemplul de mai jos am schimbat fundal și culori de font:
<style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
<item name="colorButtonNormal">@color/Red</item>
<item name="android:textColor">@color/White</item>
</style>
Apoi, aveți nevoie doar să se aplice acest nou stil pe butonul cu:
android:theme="@style/AppTheme.Button"
Pentru a seta un buton implicit într-un design layout, trebuie să adăugați această linie la styles.xml tema:
<item name="buttonStyle">@style/btn</item>
unde @stil/btn
este butonul temă. Aceasta stabilește butonul de stil pentru toate butoanele într-un layout cu o temă specifică
compile 'com.android.support:appcompat-v7:25.2.0'
public class MainActivity extends AppCompatActivity
<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">
<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"/>
Dacă am înțeles bine, vrei să faci ceva de genul asta:
În acest caz, ar trebui să fie doar suficient pentru a utiliza:
<item name="android:colorButtonNormal">#2196f3</item>
Sau pentru API mai puțin de 21 de ani:
<item name="colorButtonNormal">#2196f3</item>
În plus față de Folosind Materiale Temă Tutorial.
Animate variantă este [aici][3].
Aici este modul în care am obținut ce am vrut.
În primul rând, a făcut un buton (în 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>
Unda și fundal pentru butonul, ca un 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>
Aceasta a adăugat efectul de val am fost în căutarea pentru.
Cu versiune stabila de Android Materialelor Componente în Noiembrie 2018, Google s-a mutat cu componente din materiale din spațiul de nume
android.sprijin.design " la " com.google.android.material
. Material Component library este înlocuitor pentru Android Design Support Library.
Adaugă dependența pentru a-ți construi.gradle`:
dependencies { implementation ‘com.google.android.material:material:1.0.0’ }
Apoi se adauga MaterialButton
pentru aspectul dvs.:
<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"
/>
Puteți verifica documentație completă și aici API aici.
Pentru a schimba culoare de fundal ai 2 optiuni.
backgroundTint
atribut.Ceva de genul:
<style name="MyButtonStyle"
parent="Widget.MaterialComponents.Button">
<item name="backgroundTint">@color/button_selector</item>
//..
</style>
materialThemeOverlay
atribut.Ceva de genul:
<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>
Opțiunea#2 necesită 'com.google.android.material:material:1.1.0'.
VECHI Support Library:
Cu noi Support Library 28.0.0, Design Library acum conține MaterialButton
.
Puteți adăuga acest buton pentru a noastră layout fișierul cu:
<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" />
În mod implicit, această clasă va folosi culoare de accent tema pentru butoane pline de culoare de fundal, împreună cu alb pentru butoanele de culoarea textului.
Poți personaliza butonul cu aceste atribute:
app:rippleColor`: culoarea sa fie folosit pentru butonul efect de unda
app:backgroundTint`: Folosit pentru a aplica o nuanta de fundal a butonului. Dacă doriți să modificați culoarea de fundal a butonului, folosiți acest atribut în loc de fundal.
app:strokeColor`: culoarea sa fie folosit pentru butonul de accident vascular cerebral
app:strokeWidth`: lățimea să fie folosit pentru butonul de accident vascular cerebral
app:cornerRadius`: Folosit pentru a defini raza utilizată pentru colțuri ale buton
Aici este un exemplu care vă va ajuta în aplicarea butonul de stil în mod constant în întreaga aplicație.
Aici este un exemplu de Tema am folosit cu stiluri specifice..
<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>
Acest lucru este cum am definit forma butonului & efecte în interiorul res/drawable-v21 folder...
<?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 colțuri să-l păstrați în concordanță cu tema Material.
Langa android.sprijin.design.buton.MaterialButton` (care s-a menționat de către Gabriele Mariotti),
Există, de asemenea, un alt "Butonul" widget numit com.google.android.material.buton.MaterialButton
, care are diferite stiluri și se extinde de la 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"
Umplut, crescute de "Butonul" (implicit):
style="@style/Widget.MaterialComponents.Button"
style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
style="@style/Widget.MaterialComponents.Button.TextButton"
style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/icon_24px" // Icons can be added from this
Un text Buton cu o pictogramă::
Citiți: https://material.io/develop/android/components/material-button/
Un confort de clasă pentru a crea un Material nou butonul.
Această clasă consumabile Materiale actualizat stiluri pentru butonul din constructor. Widget-ul va afișa corect default Material stiluri, fără utilizarea de stilul de pavilion.
Am încercat o mulțime de răspuns & terț libs, dar nici unul nu ținea de frontieră și crescut efect asupra pre-lollipop având în același timp efect de unda pe lollipop fără dezavantaj. Aici este ultima mea soluție care combină mai multe răspunsuri (de frontieră/ridicat nu sunt bine redate pe gif-uri din cauza tonuri de gri adâncime de culoare) :
Lollipop
Pre-lollipop
construi.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>
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>
Activitatea'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;
}
});
<?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>
Am'am creat o bibliotecă android, care vă permite să modificați cu ușurință butonul de culoare și de unda de culoare
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"/>
Nu't nevoie pentru a crea un stil pentru fiecare buton vrei cu altă culoare, permițându-vă pentru a personaliza culorile la întâmplare
puteți da aviației la vedere prin adăugarea de axa z și poate fi implicit umbra la ea. această caracteristică a fost prevăzută în L examinare și va fi disponibil după lansare. Acum puteți adăuga pur și simplu o imagine care dă această uita-te pentru butonul de fundal