2013-07-31 21 views
10

Sto facendo un quiz Andorid e voglio evidenziare un pulsante quando viene cliccato ma quando l'utente lascia andare il pulsante che gira nel suo colore originale. Vedete che ho impostato lo sfondo del pulsante in modo che i pulsanti possano essere arrotondati. L'ho impostato in drawable.Come evidenziare un pulsante quando viene premuto?

<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

Una soluzione semplice utilizzando un filtro di colore simile a quello di Vishwas e con una più completa descrizione della soluzione onTouchListener come quella di Raghunandan: http://stackoverflow.com/a/14278790/891479 Crea un OnTouchListener modificando il filtro colorato al tocco. –

risposta

13

È possibile utilizzare OnTouchListener oppure è possibile utilizzare un selettore.

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; 
} 
}); 

È anche possibile utilizzare un selettore. Bordi e rettangolo arrotondato. Personalizza lo stesso.

bkg.xml nella cartella drawable

<?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 nella cartella drawable

<?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 nella cartella drawable

<?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> 

Ora impostare lo sfondo fro il pulsante in xml

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

Perché non un pulsante di attivazione/disattivazione? o è essenzialmente la stessa cosa –

+0

@AviParshan dipende dal requisito. Toggle è generalmente utilizzato per le stesse condizioni on/off – Raghunandan

11

utilizzare un selettore come questo e impostare lo sfondo dei pulsanti sul drawable.

<?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

Modifica 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

Se si vuole fare a livello di codice, allora si può anche provare uno dei seguenti due metodi: -

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

o questo modo

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

inserisci questo codice in te r onCreate il metodo di attività e lo farà. È possibile modificare i codici colore in base alla propria scelta.

Spero che questo aiuti.

0

Se non si desidera creare 2 drawable con un selettore xml, o 2 forme o anche non si vuole disturbare a farlo programmaticamente con un filtro colore, è possibile utilizzare l'evidenziatore integrato Android ussing the selectableItemBackground attibute:

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

in xml. Per esempio:

<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

selettore.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" /> 
Problemi correlati