2014-12-06 16 views
8

Voglio creare un frammento di finestra di dialogo con gli angoli. Il problema che hoLayout angolo tondo Android in dialogfragment

enter image description here

Come si vede, se un TextView in in cima, ci saranno alcune parti di esso che è sopra la parte trasparente della finestra di dialogo, che è male. Ciò accade anche con quella barra di scorrimento dalla listview. Voglio "tagliare" quelle parti .. o mascherarle come nella seconda foto. È possibile?

forma

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#FFF" /> 
    <corners android:topLeftRadius="20dp" android:topRightRadius="20dp" 
     android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"/> 
    <stroke android:color="#7F7F7F" android:width="1dp" /> 
</shape> 

sto usando un layout lineare per il frammento, con lo sfondo di cui sopra. chiamo

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

per sbarazzarsi della barra del titolo colore di sfondo &.

+0

Puoi provare il nuovo CardView, ha gli angoli arrotondati e la proprietà di elevazione, è bello –

+0

Voglio usare DialogFragment .. la vista della scheda è una vista ... Voglio ottenere qualcosa come la finestra di dialogo di commento di Facebook (so che è un finestra popup, ma voglio fare una cosa simile con la finestra di dialogo dei frammenti) –

risposta

3

Il modo più semplice (non-clipping)

Il modo più semplice sarebbe quella di aggiungere semplicemente imbottitura per il layout. Quindi il tuo testo non si sovrapporrà agli angoli arrotondati.

Se è necessario avere gli angoli arrotondati senza imbottitura, ci sono alcune altre opzioni che io sappia:

Opzione 1: clip Visualizzazioni (API) 21+

supporto per clipping views è stato aggiunto al la classe View in API 21. Se non è necessario livelli API precedenti, è davvero facile da usare questa funzione la clip in-built:

  • Impostare la forma arrotondata drawable come il layout sfondo.
  • Secondo la documentazione, è poi basta impostare l'attributo clip nel layout di XML per android:clipToOutline="true"

Purtroppo, non c'è a bug e questo attributo non sembra funzionare.Per fortuna, siamo in grado di impostare il ritaglio in Java:

  • Nella vostra attività o frammento, basta fare: View.setClipToOutline(true)

ho provato, e funziona:

View Clipping ON View Clipping OFF

Opzione 2: maschera per telaio a nove fori

Se è necessario supportare clipping arrotondata sui dispositivi < API 21, è possibile utilizzare questo approccio generale:

  • Utilizzando un FrameLayout o RelativeLayout, creare un angolo arrotondato nine-patch a "frame" il resto della tua contenuti .
  • Questa immagine a nove patch deve essere trasparente (alfa 0%), ad eccezione degli angoli, che dovrebbero essere opachi (alfa 100%).
  • Imposta il nove patch come sfondo di una vista e posiziona quella vista come ultimo figlio nel layout (questo lo impila in cima alle altre viste).
  • Il testo verrà quindi visualizzato attraverso la nove patch trasparente, ma verrà mascherato agli angoli.

Se si utilizza questo approccio, è sufficiente che gli angoli delle nove aree corrispondano al colore dello sfondo.

Problemi correlati