android d'une - AlertDialog:Comment supprimer les bordures noires au-dessus et au-dessous de la vue




vidéo movie (5)

Cette question a été posée avant: Le titre personnalisé AlertDialog a une bordure noire

Mais n'a pas reçu de réponse satisfaisante - et manque certaines informations.

J'essaie de créer une boîte de dialogue personnalisée sous Android sans titre et sans boutons en bas.

Cependant, la boîte de dialogue qui en résulte comporte des "bordures" / "espacement" / quelque chose de noir en haut et en bas de la vue.

De la documentation :

Un dialogue avec la classe de base Dialog doit avoir un titre. Si vous n'appelez pas setTitle (), l'espace utilisé pour le titre reste vide, mais toujours visible. Si vous ne voulez pas de titre, vous devez créer votre boîte de dialogue personnalisée à l'aide de la classe AlertDialog. Cependant, comme AlertDialog est créé plus facilement avec la classe AlertDialog.Builder, vous n'avez pas accès à la méthode setContentView (int) utilisée ci-dessus. Au lieu de cela, vous devez utiliser setView (View). Cette méthode accepte un objet View. Vous devez donc gonfler l'objet root de la présentation à partir de XML.

Donc, c'est ce que j'ai fait:

Bienvenue.java

public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        builder.create().show();
    }
}

welcomeialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@drawable/texturebg"
              android:id="@+id/layout_root"
              android:orientation="vertical"
              android:padding="40px">
    ...
</LinearLayout>

NOTE: J'ai essayé d'utiliser FrameLayout tant que FrameLayout racine ViewGroup lieu de LinearLayout selon une suggestion que j'ai trouvée quelque part - mais cela n'a pas aidé.

Résultat

setBackgroundDrawable Suggestion

public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        AlertDialog dialog = builder.create();

        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

        dialog.show();
    }
}

N'a pas fonctionné pour moi


Answers

Juste pour que la réponse de Steve soit plus claire, cela peut se faire facilement. Par exemple, dans mon cas, la vue que je définissais dans la boîte de dialogue était une vue Web.

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    WebView webView = new WebView(getActivity());
    webView.loadUrl(" url to show ");


    OnClickListener clickListenerOk = new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            ...
        }
    };

    OnClickListener clickListenerCancel = new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            ...
        }
    };

    AlertDialog dialog = new AlertDialog.Builder(getActivity())

            .setPositiveButton("OK", clickListenerOk)

            .setNegativeButton("Cancel",clickListenerCancel)

            .create();

    dialog.setView(webView, 0, 0, 0, 0);

    return dialog;
}

Dans mon cas, cette bordure était causée par le thème de l'activité parent pour AlertDialog. Pour se débarrasser complètement de la frontière, donnez-lui un thème différent (ici, Holo):

AlertDialog.Builder builder = new AlertDialog.Builder(
                                new ContextThemeWrapper(this, android.R.style.Theme_Holo)
                              );

Cela a corrigé pour moi. J'espère que cela t'aides!


setBackgroundDrawable(new ColorDrawable(0));

Appelez ceci dans votre boîte de dialogue.


Si vous regardez la source de la classe AlertDialog, vous verrez que la plupart des méthodes sont simplement des méthodes proxy (facade) autour de private AlertController mAlert .

En regardant la source de la classe AlertController, vous verrez 4 variables membres intéressantes:

private int mViewSpacingLeft;
private int mViewSpacingTop;
private int mViewSpacingRight;
private int mViewSpacingBottom;
private boolean mViewSpacingSpecified = false;

mViewSpacingSpecified vous mViewSpacingSpecified sur true , les bordures en haut et en bas de la boîte de dialogue seront supprimées.

Cela se fait correctement en changeant cette ligne:

dialog.setView(layout);

à:

dialog.setView(layout, 0, 0, 0, 0);

Cela fonctionne pour moi:

    ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    // Mobile
    State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

    // Wi-Fi
    State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    // And then use it like this:

    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
    }
    else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled  :) ....",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
    }

Et ajoutez cette permission:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />




android android-layout android-dialog