2017-08-08 3 views
1

regardé dans ce un peu, mais mon expérience avec la liste des calques est encore inférieure. Voici mon xml:Android DialogFragment - Comment changer la couleur du fragment de dialogue avec des coins arrondis par programme

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
     <corners android:radius="10dip"/> 
     <padding 
      android:bottom="2dip" 
      android:left="8dip" 
      android:right="8dip" 
      android:top="2dip"/> 
    </shape> 
</item> 

<item 
    android:id="@+id/dialog_bg"> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
     <solid android:color="#FFFFFF"/> 
     <stroke 
      android:width="16dip" 
      android:color="#FFFFFF"/> 

     <padding 
      android:bottom="2dip" 
      android:left="8dip" 
      android:right="8dip" 
      android:top="2dip"/> 
    </shape> 
</item> 
</layer-list> 

Ai-je la bonne idée sur la façon de faire cela?

Je souhaite utiliser cette méthode java:

getDialog().getWindow().setBackgroundDrawableResource(R.drawable.rounded_corners_dialog); 

Mais comment pourrais-je aller à changer la couleur de celui-ci, plus tard dans le code?

Merci,

T

+0

Vous pouvez étendre cette classe et remplacer son 'onCreateView()' – ZeekHuge

+0

@Vanna C'est en fait plus tard dans onCreateView. Je reçois la couleur int d'un paquet que je passe. – TJBlack31

Répondre

2

Vous pouvez faire CardView comme le conteneur parent de la mise en page de votre DialogFragment personnalisé. Voici un exemple rapide:

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    app:cardCornerRadius="8dp" 
    app:cardElevation="10dp" 
    app:cardUseCompatPadding="true"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical"> 
     //Put all your views here 

    </LinearLayout> 
</android.support.v7.widget.CardView> 

Maintenant, dans votre classe qui étend DialogFragment override onCreateDialog comme ceci:

@NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
     dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     return dialog; 
    } 

Maintenant, plus tard vous pouvez faire un coin arrondi et vous pouvez changer la couleur de fond du CardView. Essayez-le :)

+0

C'est une super idée, je vais essayer! Merci – TJBlack31

+0

Bienvenue. Si cela vous a été utile Ne marquez ma réponse avec une coche verte :) –

+0

@sagur suri Grande solution! Je vous remercie. – TJBlack31