2016-09-13 2 views
1

mantaining Ich mag Button mit eigener Form zu schaffen, die auf der Druckmaschine wie in Thema „Base.Widget.AppCompat.Button.Colored“ reagieren würden.ändert Form Knopf während seines Materialdesign Kräuselungeffekt

jedoch bacause Ich muss seine Form (abgerundete Ecken anpassen I außer Kraft setzen müssen, um seine android:background - das ist bisher der einzige Weg, ich weiß (kein ... nein, ich werde nicht schmutzig Hacks mit FrameLayout verwenden). Aktuell kann es nur, indem sie unsere eigenen <shape> in xML-Datei als Hintergrund ziehbar erfolgen

Der vielversprechendste Code, dieselectableItemBackground ermöglichen - so für mich imporant ist.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <solid android:color="@color/colorAccent"/> 
      <corners android:topLeftRadius="@dimen/button_shape_radius" 
       android:topRightRadius="@dimen/button_shape_radius"/> 
     </shape> 
    </item> 

    <item android:drawable="?attr/selectableItemBackground"> 
     <shape> 
      <solid/> 
      <corners android:topLeftRadius="@dimen/button_shape_radius" 
       android:topRightRadius="@dimen/button_shape_radius"/> 
     </shape> 
    </item> 
</layer-list> 

Leider kann ich nicht zweiten Artikel mit <item android:drawable="?attr/selectableItemBackground"> Form daher Form im Ende gepressten Gegenstand Form ist Rechteck. enter image description here

Ich würde appreciate, wenn jemand mir eine Lösung für dieses Problem geben wird. Ich benutze API_MIN = 16, also kann kein Ripple-Effekt verwendet werden. Ich möchte auch nicht FrameLayout oder externe Bibliothek verwenden, die mich zwingt, Button mit etwas zu umhüllen.

Antwort

1

Um eine Welligkeit von unter 21 haben Sie diese Bibliothek verwenden können Ripple Effect Sie Ihre Form ohne die Ripple-Tag verwenden und die Ansicht mit RippleView um weitere Informationen umgeben Sie den Usage Abschnitt überprüfen

21+ Sie dieses i versuchen testen sie es nicht, aber es sollte funktionieren, setzen sie diese in den Ordner ziehbar-v21

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
android:color="?attr/colorControlHighlight"> 
<item> 
    <shape> 
     <solid android:color="@color/colorAccent"/> 
     <corners android:topLeftRadius="@dimen/button_shape_radius" 
      android:topRightRadius="@dimen/button_shape_radius"/> 
    </shape> 
</item> 

<item android:drawable="?attr/selectableItemBackground"> 
    <shape> 
     <solid/> 
     <corners android:topLeftRadius="@dimen/button_shape_radius" 
      android:topRightRadius="@dimen/button_shape_radius"/> 
    </shape> 
</item> 
</ripple> 

UPDATE

ich ändern d der Quellcode von Ripple Effect auf eine Schaltfläche

können Sie erhalten den Code here

USAGE

Genau wie jede normale Taste

XML

<path.to.the.RippleButton 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_rounded_top_blue" 
    android:id="@+id/mybutton"/> 

Java

RippleButton button = (RippleButton) findViewById(R.id.mybutton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(MainScreen.this, "You did it", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

Wenn Sie andere Ansicht, die Sie brauchen nur ein paar kleine Änderungen an den Quellcode machen es einfach ist (meiner Meinung nach)

+0

Die Bibliothek funktioniert, jedoch ist es nicht die beste soultion 4me, weil ich zu Verwenden Sie jedes Mal Wrapper außerhalb meiner Ansicht, während ich ** One ** Button Stil im Sinne der Wiederverwendung von Code deklarieren wollen – murt

+0

yhe Sie haben Recht, ich habe versucht, genau das gleiche gestern zu tun, ich habe 4 Ansichten auf meiner App das füllen Sie den Bildschirm und ich habe jede mit 'Rippleview' zu wickeln, ich habe auf ein paar Geräten getestet und ich habe keine Leistungsprobleme, aber mein Layout ist einfach –

+0

Ich habe Ihre Antwort nicht genehmigt, weil ich hoffe, dass jemand mit etwas besser kam – murt