2012-02-17 42 views
54

Desidero creare pulsanti arrotondati in un programma Android. Ho guardato How to create EditText with rounded corners?Pulsante arrotondato in Android

Quello che voglio ottenere è:

  1. arrotondato Bottoni bordo
  2. Change Pulsante sfondo/apparizione su diversi stati (come Onclick, Focus)
  3. usare il mio PNG per lo sfondo e non creare una forma.
+1

http://nishantvnair.wordpress.com/2010/11/09/customize-button-in-android/ –

+0

Selezionare questa http://www.gadgetsaint.com/tips/ arrotondato-angoli-viste-layout-android/#. WPz2QVN97BI – ASP

risposta

100

È possibile eseguire un pulsante angolo arrotondato senza ricorrere a un ImageView.

Una risorsa selettore sfondo, button_background.xml:

<?xml version="1.0" encoding="utf-8" ?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Non focused states 
     --> 
     <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
    <!-- Focused states 
     --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
    <!-- Pressed 
     --> 
     <item android:state_pressed="true" android:drawable="@drawable/button_press" /> 
    </selector> 

Per ogni stato, una risorsa drawable, ad esempio button_press.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <stroke android:width="1dp" android:color="#FF404040" /> 
    <corners android:radius="6dp" /> 
    <gradient android:startColor="#FF6800" android:centerColor="#FF8000" android:endColor="#FF9700" android:angle="90" /> 
</shape> 

Nota attribuiscono gli angoli, questo si ottiene angoli arrotondati

android:background="@drawable/button_background" 
+1

CSMith. Ho fatto funzionare il selettore. Sono un po 'confuso dalla seconda parte su dove inserire il codice. Creo un file xml separato. Se sì, come posso chiamarlo? Sto assumendo per il pulsante, ho ancora impostato lo sfondo su @ drawable/button_background ... Thx –

+0

sì, imposta lo sfondo su button_background, e avrai un file xml per ogni "stato" nella tua selezione, la seconda parte è un esempio button_press.xml. – CSmith

+1

CSmith. Quindi, dove viene chiamato questo file xml separato. Nell'esempio sopra hai lo sfondo impostato su un oggetto drawable e ciò funziona alla grande per far cambiare lo sfondo all'interazione. Tuttavia, il pulsante non è arrotondato a meno che non si crei il png. con angoli arrotondati e utilizzare nove patch per evitare distorsioni. –

3

Estendere ImageView in questo modo:

public class RoundedImageView extends ImageView { 
    private static final String TAG = "RoundedImageView"; 

    private float mRadius = 0f; 

    public RoundedImageView(Context context) { 
    super(context); 
    } 

    public RoundedImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    // retrieve styles attributes 
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedView); 
    mRadius = a.getDimension(R.styleable.RoundedView_radius, 0f); 
    a.recycle(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    // only do this if we actually have a radius 
    if(mRadius > 0) { 
     RectF rect = new RectF(0, 0, getWidth(), getHeight()); 
     Path clipPath = new Path(); 
     clipPath.addRoundRect(rect, mRadius, mRadius, Path.Direction.CW); 
     canvas.clipPath(clipPath); 
    } 
    super.onDraw(canvas); 
    } 
} 

e applicare la vostra risorsa sfondo normale ad esso e devono essere tagliate con angoli arrotondati.

+0

ci sono R.styleable.RoundedView_radius e R.styleable.RoundedView di default? –

+0

Cody, come posso visualizzare il codice sorgente per android.widget.imageview.class. Continuo a ricevere che desideri allegare un file sorgente perché non è stato trovato in eclissi. –

+0

@Jib è possibile accedere al codice sorgente Android all'indirizzo: http://source.android.com/source/downloading.html –

8

It is recommended by Google che non elementi dell'interfaccia utente mimici da altre piattaforme. Non metterei pulsanti arrotondati stile iOS in un'applicazione Android.

+39

Non è colpa nostra se gli sviluppatori hanno deciso di mettere una brutta interfaccia utente come standard. – Yehonatan

+5

In effetti l'interfaccia utente predefinita è brutta ... –

+0

Questo è un po 'dopo il vecchio, ma ho pensato di aggiungere a chiunque leggendo che l'app della mia precedente azienda non era presente nell'app store a causa di un sacco di stile dell'interfaccia utente iOS .Abbiamo dovuto rivedere e inserire le opportune considerazioni sulla progettazione dei materiali. Sempre importante seguire le linee guida! – lase

53

Se avete bisogno di un pulsante rotondo in Android, quindi creare un file XML "RoundShapeBtn.xml", come drawable.

<?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="#6E6E6E"/> <!-- this one is ths color of the Rounded Button --> 
    <corners 
    android:bottomRightRadius="10dp" 
    android:bottomLeftRadius="10dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp"/> 
</shape> 

Aggiungi questo al codice del pulsante:

android:background="@drawable/RoundShapeBtn" 
+1

Aggiungo anche il carattere qui nel caso in cui desidero che il testo del pulsante sia di un font particolare? –

+0

@GarimaTiwari si si può fare questo e molto di più nella progettazione relativa –

+1

In realtà si ottiene un errore di compilazione se si nomina il file con CapitalLettersInTheName .. :) – tplive

2

questo può essere fatto utilizzando l'attributo angolo. Guarda il sotto xml.

<item> 
    <shape android:shape="rectangle" > 
     <stroke 
      android:height="1.0dip" 
      android:width="1.0dip" 
      android:color="#ffee82ee" /> 

     <solid android:color="#ffee82ee" /> 

     <corners 
      android:bottomLeftRadius="102.0dip" 
      android:bottomRightRadius="102.0dip" 
      android:radius="102.0dip" 
      android:topLeftRadius="102.0dip" 
      android:topRightRadius="102.0dip" /> 
    </shape> 
</item> 

1

E 'molto meglio mettere gli stati dei pulsanti e le forme in un file di selezione 1 xml. Ciò dovrebbe rendere la tua app più veloce/migliore. Prova questo (per gentile concessione di Introduzione allo sviluppo di applicazioni Android). Non spammare qui solo mostrando questo non è il mio codice.

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

    <item android:state_pressed="true" > 
    <shape android:shape="rectangle" > 
    <corners android:radius="12dip" /> 
    <stroke android:width="1dip" android:color="#333333" /> 
    <gradient android:angle="-90" android:startColor="#333333"  android:endColor="#555555" />    
    </shape> 
    </item> 
    <item android:state_focused="true"> 
    <shape android:shape="rectangle" > 
    <corners android:radius="12dip" /> 
    <stroke android:width="1dip" android:color="#333333" /> 
    <solid android:color="#58857e"/>  
    </shape> 
    </item> 
    <item > 
    <shape android:shape="rectangle" > 
    <corners android:radius="12dip" /> 
    <stroke android:width="1dip" android:color="#333333" /> 
    <gradient android:angle="-90" android:startColor="#333333" android:endColor="#555555" />    
    </shape> 
    </item> 

    </selector> 

punta P.S.-design: le pendenze e rettangoli arrotondati vengono meglio utilizzati quando difficilmente si può dire che sono lì da usare con saggezza.

7

creare file xml nella cartella drawable in Android come:

rounded_button.xml

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

    <corners android:radius="20dp"/> // if you want clear round shape then make radius size is half of your button`s height. 
    <solid android:color="#EEFFFFFF"/> // Button Colour 
    <padding 
     android:bottom="5dp" 
     android:left="10dp" 
     android:right="10dp" 
     android:top="5dp"/> 

</shape> 

Ora questo file XML come pulsanti di sfondo.

<Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:background="@drawable/rounded_button" 
     android:text="@string/button_text" 
     android:textColor="@color/black"/> 
+0

Questo è ciò che la maggior parte delle persone cerca in realtà. Bordi rettangolari lisci molto curvi. Come posso mettere un'ombra sul pulsante? Grazie! –

+0

Stellar! Se qualcuno è infastidito dal dover creare XML distinti con bottoni arrotondati per ottenere colori diversi, è possibile rimuovere il 'solido android: color' dall'XML drawable, e invece specificare i colori usando' android: backgroundTint' per ogni 'Button' –

0

pulsanti arrotondati possono essere creare utilizzando la forma di anello drawable vedere anche la http://www.zoftino.com/android-shape-drawable-examples

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:innerRadius="0dp" 
    android:shape="ring" 
    android:thickness="40dp" 
    android:useLevel="false"> 
    <solid android:color="@color/colorPrimary" /> 
    <padding android:bottom="50dp" 
     android:left="16dp" 
     android:right="16dp" 
     android:top="50dp"/> 
</shape> 
0

rounded_bg_white.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="#fff"/> 
      <stroke android:color="#fff" android:width="2dp" /> 
      <corners android:radius="2dp" /> 
     </shape> 
    </item> 
</selector> 

rounded_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/colorPrimary"/> 
      <stroke android:color="@color/colorPrimary" android:width="2dp" /> 
      <corners android:radius="2dp" /> 
     </shape> 
    </item> 
</selector> 

rounded_button_signup.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/colorPrimary"/> 
      <stroke android:color="@color/colorPrimary" android:width="2dp" /> 
      <corners android:radius="30dp" /> 
     </shape> 
    </item> 
</selector>