Je crée un DialogFragment
personnalisé. La disposition de la boîte de dialogue est définie sur my_dialog.xml
, mais comment modifier la couleur de la boîte de dialogue (le gris transparent)?
my_dialog.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >
<TextView
Android:id="@+id/hello"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:background="@Android:color/holo_orange_light"
Android:gravity="center"
Android:text="hello" />
</RelativeLayout>
MyDialogFragment.Java
public class MyDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_dialog, container);
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return view;
}
}
Je devais régler Android:windowIsFloating
à faux et Android:windowBackground
à ma couleur personnalisée dans le style de dialogue:
styles.xml
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="MyDialog" parent="@Android:style/Theme.Dialog">
<item name="Android:windowFrame">@null</item>
<item name="Android:windowBackground">@color/orange_transparent</item>
<item name="Android:windowIsFloating">false</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowTitleStyle">@null</item>
<item name="Android:colorBackgroundCacheHint">@null</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:gravity">center</item>
</style>
</resources>
MyDialogFragment
public class MyDialogFragment extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MyDialog);
}
}
Je voulais un fond transparent pour mon DialogFragment
, et, dans le code, cela fonctionne bien:
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
window.setBackgroundDrawableResource(Android.R.color.transparent);
}
Bien sûr, vous pouvez spécifier n'importe quelle couleur ou Drawable
en utilisant setBackgroundDrawable()
ou setBackgroundDrawableResource()
.
Cela fonctionne au moins dans onStart()
, mais pas dans onCreate()
, et pas nécessairement dans onCreateView()
, il semble .
Cela dit, dans la plupart des cas, il est probablement plus propre de le faire en XML, en utilisant des styles , le long de ces lignes:
<style name="MyDialogStyle" parent="@Android:style/Theme.Holo.Light.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
Pour obtenir une boîte de dialogue entièrement transparente, vous pouvez définir dans onCreateView
ce qui suit
setBackgroundDrawable
à Color.TRANSPARENT
setDimAmount
à 0
Voir l'exemple de code ici:
public class TextEditor extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_text_editor, container);
// make dialog itself transparent
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// remove background dim
getDialog().getWindow().setDimAmount(0);
//[add more custom code here...]
return view;
}
}
J'ai trouvé que j'avais juste besoin de faire ça:
<style name="MyDialog" parent="@Android:style/Theme.Dialog">
<!-- other attributes -->
<item name="Android:backgroundDimEnabled">false</item>
</style>
Remplacer onCréer et définir le style devrait fonctionner.
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
setStyle(DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent);
}
Ceux qui utilisent le générateur AlertDialog dans 'onCreateDialog
' au lieu de 'onCreateView
' peuvent attribuer un thème comme le code suivant. Un ensemble complet de thèmes peut être trouvé à partir de R.style . N'oubliez pas que certains d'entre eux ont été pris en charge récemment et ne sont pas disponibles sur les anciens téléphones de l'appareil.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Android.R.style.Theme_Translucent);
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
builder.setView(view);
return builder.create();
}
La réponse de Jul était presque bonne pour moi. Mais il semble que cela ne fonctionne pas lors de l'utilisation d'un AlertDialog.Builder.
J'ai dû définir le style ici:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialog );
changez votre texte Background
sur le XML
je viens de modifier votre code remplacez-le par le vôtre
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >
<TextView
Android:id="@+id/hello"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:gravity="center"
Android:text="hello" />
parce que vous avez donné la hauteur et la largeur de TextView
de 100dp. et définir un arrière-plan qui remplira toute la boîte de dialogue. puisque votre disposition principale est wrap_content. veuillez accepter la réponse si cela vous a aidé.
Modifier: pour modifier le background
il suffit d'ajouter à votre mise en page ou à votre affichage de texte Android:background="#232323"
vous pouvez changer ces numéros en n'importe quelle couleur de votre choix. ou vous pouvez définir un arrière-plan à partir de drawable
comme Android:background="@drawable/yourpicturename"