2016-07-12 20 views
6

Dopo aver aggiunto il colore a un pulsante di Android, perde il suo effetto a catena che fa sentire l'utente come se ci fosse un clic reattivo. Come posso risolvere questo? Ho cercato tra molte soluzioni, ma non sono riuscito a trovarne uno definito che non fosse ambiguo.Android, l'impostazione del colore di sfondo del pulsante perde l'effetto a catena

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".ClockInOutFragment"> 


    <AnalogClock 
     android:id="@+id/clock" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/date_and_time"/> 


    <RelativeLayout 
     android:id="@+id/date_and_time" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"> 

     <TextView 
      android:id="@+id/time_digits" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="12:10" 
      android:textSize="45sp"/> 

     <TextView 
      android:id="@+id/am_pm" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBaseline="@+id/time_digits" 
      android:layout_toRightOf="@+id/time_digits" 
      android:paddingLeft="3dp" 
      android:text="PM" 
      android:textSize="20sp"/> 

     <TextView 
      android:id="@+id/date" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/time_digits" 
      android:text="Mon, July 11" 
      android:textSize="22sp"/> 
    </RelativeLayout> 

    <!--Clock in and out buttons--> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/textView3" 
      android:layout_width="0dp" 
      android:layout_height="56dp" 
      android:layout_weight="1" 
      android:background="#4CAF50" 
      android:gravity="center" 
      android:text="Clock In" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textColor="#FFFFFF"/> 

     <!--Divider between the clock in and out button--> 
     <View 
      android:layout_width="1dp" 
      android:layout_height="match_parent" 
      android:background="#B6B6B6"/> 

     <Button 
      android:id="@+id/textView4" 
      android:layout_width="0dp" 
      android:layout_height="56dp" 
      android:layout_weight="1" 
      android:background="#FF5252" 
      android:gravity="center" 
      android:text="Clock Out" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textColor="#FFFFFF"/> 
    </LinearLayout> 


</RelativeLayout> 

risposta

9

È possibile aggiungere il colore di sfondo effetto & ondulazione con un'ondulazione additionnal drawable:

il layout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:id="@+id/button_connect" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dip" 
     android:fontFamily="sans-serif" 
     android:text="Connect" 
     android:background="@drawable/ripple" 
     android:textColor="#FFFFFF" 
     android:textSize="18sp" /> 

</LinearLayout> 

ripple.xml (questo è dove è possibile aggiungere il colore di sfondo in aggiunta all'effetto a catena):

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

    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="?android:colorAccent" /> 
     </shape> 
    </item> 

    <item> 
     <shape android:shape="rectangle"> 
      <!-- put your background color here--> 
      <solid android:color="@color/default_color" /> 
     </shape> 
    </item> 

</ripple> 
+0

come Android differenzia quale è la maschera e quale è il colore predefinito? –

7

Non modificare il sfondo del pulsante. Cambia il tema.

<style name="ButtonGray"> 
    <item name="colorButtonNormal">@color/gray</item> 
</style> 

e nel file XML

<Button 
    android:id="@+id/accept_button" 
    android:layout_height="wrap_content" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:text="@string/button_accept_group" 
    android:theme="@style/ButtonGray"/> 

Oppure è possibile aggiungere nella vostra applicazione principale tema

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

e non è necessario cambiare sfondo del pulsante.

Se si desidera uno sfondo totalmente personalizzato è necessario creare il proprio selettore. E puoi impostare un effetto a catena.

0

Basta usare:

android:backgroundTint="#4CAF50" 

Invece di:

android:background="#4CAF50" 

Non dimenticare di cambiare la vostra Button a android.support.v7.widget.AppCompatButton

+0

Ho cambiato ma non funziona –

1

Un modo molto semplice e diretto di fare questo è quello di imposta l'attributo ?attr/selectableItemBackground a android:foreground del tuo pulsante. Seguendo xml è perfettamente valido e funziona

<Button 
    android:id="@+id/btn" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/white" 
    android:foreground="?attr/selectableItemBackground"/> 
Problemi correlati