2013-07-31 13 views
10

Ich mache ein Andorid Quiz und ich möchte eine Schaltfläche hervorheben, wenn es geklickt wird, aber wenn der Benutzer den Knopf loslässt, wird er in seiner ursprünglichen Farbe angezeigt. Sie sehen, ich habe den Hintergrund der Schaltfläche festgelegt, so dass die Schaltflächen abgerundet werden können. Ich habe das in Drawable eingestellt.Wie wird eine Taste hervorgehoben, wenn gedrückt wird?

<Button 
    android:id="@+id/btn1" 
    android:background="@drawable/roundedbutton" 
    android:textColor="#ffffff" 
    android:textStyle="italic" 
    android:layout_width="225sp" 
    android:layout_marginTop="23sp" 
    android:layout_height="38sp" 
    android:layout_alignLeft="@+id/btn2" 
    android:layout_below="@+id/textView1" 
    android:text="Button" /> 

roundedbutton.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" android:padding="10dp"> 
<solid android:color="#848482"/> <!-- this one is ths color of the Rounded Button --> 

<corners 
android:bottomRightRadius="6.5dp" 
android:bottomLeftRadius="6.5dp" 
android:topLeftRadius="6.5dp" 
android:topRightRadius="6.5dp"/> 
</shape> 
+0

Eine einfache Lösung, die einen Farbfilter ähnlich dem von Vishwas und mit einer vollständigeren Verwendung onTouchListener Lösungsbeschreibung wie die von Raghunandan: http://stackoverflow.com/a/14278790/891479 Es erstellt einen OnTouchListener, der den Farbfilter bei Berührung ändert. –

Antwort

13

können Sie OnTouchListener verwenden, oder Sie können einen Selektor verwenden.

button.setOnTouchListener(new OnTouchListener() { 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      // change color 
    } 
    else if (event.getAction() == MotionEvent.ACTION_UP) { 
      // set to normal color 
    } 

    return true; 
} 
}); 

Sie können auch einen Selektor verwenden. Ränder und abgerundetes Rechteck. Passen Sie das Gleiche an.

bkg.xml in ziehbar Ordner

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/pressed" /> 
    <item android:state_focused="false" 
     android:drawable="@drawable/normal" /> 
</selector> 

normal.xml in ziehbar Ordner

<?xml version="1.0" encoding="UTF-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="#0AECBF"/>  
    <stroke android:width="3dp" 
     android:color="#0FECFF" /> 
    <padding android:left="5dp" 
     android:top="5dp" 
     android:right="5dp" 
     android:bottom="5dp"/> 
    <corners android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 
    </shape> 

pressed.xml in ziehbar Ordner

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <solid android:color="#ff33ffff" /> 
<padding android:left="5dp" 
      android:top="5dp" 
      android:right="5dp" 
      android:bottom="5dp"/> 
    <corners android:bottomRightRadius="7dp" 
      android:bottomLeftRadius="7dp" 
      android:topLeftRadius="7dp" 
      android:topRightRadius="7dp"/> 
</shape> 

nun den Hintergrund fro Ihre Taste eingestellt in xml

 android:background="@drawable/bkg" 
+0

Warum nicht eine Umschalttaste? oder ist das im Wesentlichen die gleiche Sache –

+0

@AviParshan hängt von der Anforderung ab. Toggle wird im Allgemeinen für ähnliche Ein/Aus-Bedingungen verwendet – Raghunandan

11

Verwenden Sie einen Selektor wie diesen und stellen Sie den Hintergrund Ihrer Schaltflächen auf die Zeichenfläche ein.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:state_pressed="true" 
      android:drawable="@drawable/blue" /> <!-- pressed --> 
     <item android:state_focused="true" 
      android:drawable="@drawable/blue" /> <!-- focused --> 
     <item android:drawable="@drawable/red" /> <!-- default --> 
</selector> 
6

Ändern roundedbutton.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"><shape android:padding="10dp" android:shape="rectangle"> 
      <solid android:color="#ff0000" /> 
      <!-- this one is ths color of the Rounded Button --> 

      <corners android:bottomLeftRadius="6.5dp" android:bottomRightRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp" /> 
     </shape></item> 
    <item><shape android:padding="10dp" android:shape="rectangle"> 
      <solid android:color="#848482" /> 
      <!-- this one is ths color of the Rounded Button --> 

      <corners android:bottomLeftRadius="6.5dp" android:bottomRightRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp" /> 
     </shape></item> 

</selector> 
4

Wenn Sie wollen, es zu tun programmatisch dann können Sie auch eine der Versuch folgenden zwei Methoden: -

btn1.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000)); 

oder auf diese Weise

btn1.getBackground().setColorFilter(0xFFAA4400,PorterDuff.Mode.MULTIPLY); 

setzen Sie einfach diesen Code in Sie r onCreate Methode der Aktivität und es wird. Sie können die Farbcodes nach Ihrer Wahl ändern.

Hoffe, das hilft.

0

Wenn Sie nicht möchten, 2 Drawables mit einem Selektor XML oder 2 Formen erstellen oder gar nicht programmgesteuert mit einem Farbfilter tun, können Sie die integrierte Android-Highlight verwenden, indem Sie die selectableItemBackground attibute:

<!-- Background drawable for bordered standalone items that need focus/pressed states. --> 
<attr name="selectableItemBackground" format="reference" /> 

in Ihrem xml. Zum Beispiel:

<ImageButton 
    android:id="@+id/btn_help" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_help" 
    android:background="?android:selectableItemBackground"/> 
0

Source Code

https://drive.google.com/open?id=0BzBKpZ4nzNzUQ3RKZjE0eG15Rlk

Selektor. xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/pressed" /> 
    <item android:state_focused="false" 
     android:drawable="@drawable/normal" /> 
</selector> 

normalpressed.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/colorPrimary"/> 
    <stroke android:width="3dp" 
     android:color="@color/colorPrimaryDark" /> 
    <padding android:left="5dp" 
     android:top="5dp" 
     android:right="5dp" 
     android:bottom="5dp"/> 
    <corners android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 
</shape> 

pressed.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    <!--<solid android:color="#ff33ffff" />--> 
    <solid android:color="@color/colorHighLight" /> 
    <padding android:left="5dp" 
     android:top="5dp" 
     android:right="5dp" 
     android:bottom="5dp"/> 
    <corners android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 
</shape> 


**button** 

     <Button 
     android:id="@+id/btn_sign_in" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:background="@drawable/selector" 
     android:drawableLeft="@android:drawable/btn_star_big_on" 
     android:drawablePadding="10dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="90dp" 
     android:layout_marginRight="20dp" 
     android:gravity="center" 
     android:paddingLeft="10dp" 
     android:paddingRight="30dp" 
     android:text="Sign In" 
     android:textColor="#ffffff" 
     tools:layout_editor_absoluteY="0dp" 
     tools:layout_editor_absoluteX="8dp" /> 
Verwandte Themen