2015-12-24 7 views
6

Versuchen, etwas wirklich einfaches hier zu tun und haben eine Reihe von SO-Ressource nachgeschlagen, aber ohne Erfolg. Ich versuche, den Welleneffekt auf eine Taste zu bekommen, die einen drawable Hintergrund vom Typ shape drawable verwendet. Die entsprechenden Dateien:Ripple-Effekt auf die Form ausziehbar

background_button:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <stroke 
     android:width="1px" 
     android:color="#80ffffff" /> 
    <solid android:color="@android:color/transparent" /> 
</shape> 

ripple.xml im drawable-v21 Ordner:

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

Button.xml:

<Button 
        android:id="@+id/login_button" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="20dp" 
        android:layout_weight="1" 
        android:paddingTop="10dp" 
        android:paddingBottom="10dp" 
        android:background="@drawable/ripple" 


/> 

Was ist hier falsch? Danke!

Antwort

8

Mein Rat nicht <ripple Tag nutzen würde sehen. Ich habe 2 Gründe: Es ist nicht so einfach, genau das zu tun, was Sie wollen und Sie müssen 2 verschiedene .xml Dateien für jeden Hintergrund haben. Ich mag es nicht, drawable-v21 Ordner zu haben.

Meine Lösung ist Ihre Button mit FrameLayout zu wickeln und android:foreground Attribut verwenden. Auf diese Weise können Sie den gewünschten Hintergrund haben und den Welleneffekt beibehalten.

<FrameLayout 
    android:id="@+id/login_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="20dp" 
    android:layout_weight="1" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp" 
    android:foreground="?attr/selectableItemBackground"> 

    <Button 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/background_button"/> 
</FrameLayout> 

Beachten Sie, dass ich alle Attribute und die ID FrameLayout bewegt. Sie sollten onClickListener statt Button auf FrameLayout setzen.

Btw, ?attr/selectableItemBackground ist großartig. Verwenden Sie es so viel wie möglich. Es ersetzt die blaue Holo-Farbe mit Grau für alte Geräte von Android 4.0 bis 4.3.

+0

Dies scheint eine anständige Lösung. Ich werde das ausprobieren und bald ein Update veröffentlichen. Vielen Dank! – user2511882

+0

Das mache ich schon lange. Es bietet Konsistenz von Api-Ebene 7 bis 23. Ich hoffe, es wird für Sie funktionieren – tasomaniac

+0

Leider., Das funktioniert nicht. – user2511882

5

Versuchen Sie es.

ripple_effect.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:color="#2797e0" 
tools:targetApi="lollipop"> 
<item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <solid android:color="#2797e0" /> 
    </shape> 
</item> 

button.xml

<Button 
       android:id="@+id/login_button" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="20dp" 
       android:layout_weight="1" 
       android:paddingTop="10dp" 
       android:paddingBottom="10dp" 
       android:background="@drawable/ripple_effect"/> 

build.gradle

compile 'com.android.support:appcompat-v7:23.1.1' 
+2

funktionierts, wenn auch das Rechteck mehr – user2511882

+0

Das funktioniert nicht sichtbar ist! Und natürlich müssen Sie sich daran erinnern, dass die Welligkeit selbst Form verwendet, die als Maske gezeichnet werden kann. Um sowohl Ripple AND als auch Shape anzuzeigen, kann man in den Hintergrund und den anderen in Vordergrundattribute gehen. – dominus

+0

Dies funktionierte für mich, als ich 'android: id/mask" 'von' item' entfernte android: –

0

Dies wird helfen,

<com.abcd.ripplebutton.widget.RippleButton 
     android:id="@+id/Summit" 
     android:layout_width="260dp" 
     android:layout_height="50dp" 
     android:text="Login" 
     android:textColor="@color/white" 
     android:textStyle="bold" 
     app:buttonColor="@color/Button" 
     app:rippleColor="@color/white" /> 

mehr für this

1

, die für mich ziehbar/rect.xml

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape"> 
    <stroke android:width="1dp" android:color="#FF4C71F5" /> 
    <padding android:left="0dp" 
     android:top="0dp" 
     android:right="0dp" 
     android:bottom="0dp" /> 
    <corners android:radius="5dp" /> 
    <solid android:color="#00000000" /> 

</shape> 

und für Rund ziehbar/rip arbeitet.xml

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:color="#f816a463" 
    tools:targetApi="lollipop"> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#f816a463" /> 
     </shape> 
    </item> 
</ripple> 

und für den Button

<Button 
       android:id="@+id/nm" 
       android:layout_width="80dp" 
       android:layout_height="40dp" 
       android:layout_weight="1" 
       android:background="@drawable/rect" 
       android:enabled="true" 
       android:text="@string/vnm" 
       android:textColor="@color/colorpr" 
       android:textStyle="bold" 
       android:foreground="@drawable/rip"/> 

hoffen, dass diese Hilfe !!!

1

Diese Arbeit für mich ..

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:color="@color/smooth_white" 
    tools:targetApi="lollipop"> 
    <item android:drawable="@drawable/button_green_background" /> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/smooth_white" /> 
     </shape> 
    </item> 
</ripple> 

Der Punkt ist Abschnitt

<item android:drawable="@drawable/button_green_background" /> 
Verwandte Themen