web-dev-qa-db-fra.com

Transparent AlertDialog a un fond noir

J'ai un style personnalisé AlertDialog qui rend la boîte AlertDialog transparente. Cela fonctionne bien, sauf que lorsque je gonfle la mise en page transparente souhaitée dans la fenêtre de dialogue d'alerte, elle s'affiche avec un arrière-plan noir. Mon objectif est d’avoir une AlertDialog totalement transparente, où il semblerait qu’il n’y ait que 4 boutons flottants au lieu d’un cadre . La première image correspond à ce que la boîte de dialogue personnalisée me donne, l’image deux est ce que je souhaite ou ce que je vise. pour.

Voici le code à la coutume Dialog 

<style name="CustomDialog" parent="Android:Theme.Dialog">
    <item name="Android:windowFrame">@null</item>
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowTitleStyle">@null</item>
    <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
    <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="Android:backgroundDimEnabled">false</item>
    <item name="Android:background">@Android:color/transparent</item>
</style>

Voici ce que j'appelle dans ma onCreate()

AlertDialog.Builder imageDialog = new AlertDialog.Builder(TimeLine.this, R.style.CustomDialog);
inflater = getLayoutInflater();
View view=inflater.inflate(R.layout.tabs, null);![enter image description here][1]
AlertDialog a = imageDialog.create();
a.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
a.setView(view, 0, 0, 0, 0);

a.show();

current alert dialog

Desired AlertDialog

* Edit **** ** Le code pour la disposition des onglets xml est ici `

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/tabLayout"
    Android:background="#000000ff">

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button2"
        Android:layout_marginTop="206dp"
        Android:layout_below="@+id/button4"
        Android:layout_alignStart="@+id/button4" />

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button3"
        Android:layout_alignTop="@+id/button2"
        Android:layout_alignParentStart="true" />

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button4"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentEnd="true"
        Android:layout_marginTop="100dp" />

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentStart="true"
        Android:layout_marginTop="100dp" />
</RelativeLayout>

`

En testant pour voir quelle est la source du problème, j'ai découvert qu'il est vrai que la présentation est transparente, car lorsque je change la couleur d'arrière-plan de la présentation, la boîte de dialogue d'alerte change également. Cependant, lorsque la mise en page est définie sur transparente, il semble que ce qui se cache derrière la mise en page gonflée est en noir. Et à cause de cela, je ne sais pas quoi faire, ni s'il s'agit des paramètres AlertDialog ou de mon code de présentation.

13
superuserdo

Le problème est que AlertDialog builder n'est en fait pas bon pour la conception de dialogues transparents et aura toujours cet arrière-plan noir qui est en fait un thème. Utilisez plutôt la Dialog pour créer un thème transparent.

échantillon:

Dialog alertDialog = new Dialog(this);
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
alertDialog.setContentView(R.layout.tabs);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();

Utiliser Dialog ne nécessite aucune manipulation de thème pour un arrière-plan transparent, ce qui est fondamentalement facile.

72
Rod_Algonquin

Avez-vous essayé d'utiliser quelque chose comme ceci:

<style name="CustomDialog" parent="@Android:style/Theme.Translucent">
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
    ...
</style>

MODIFIER

Essayez ceci en code Java

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
5
Michael Shrestha

Dans votre R.layout.tabs,

Remplacer 

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/tabLayout"
    Android:background="#000000ff">

avec

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/tabLayout"
    Android:background="@Android:color/transparent">
1
Mehul Joisar

Ceux qui rencontrent encore des problèmes pour créer un dialogue transparent personnalisé ou un dialogue d'alerte peuvent utiliser cette combinaison. Je voulais aussi montrer un fond personnalisé c'est ce qui a fonctionné pour moi.

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

exemple:-

/**
 * alert dialog
 */

    public class ToolTipView extends AlertDialog {

        public ToolTipView(@NonNull Context context) {
            super(context);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.dialog_tool_tip_view);
        }

    }
0
vikas kumar