Boîte de dialogue Android: suppression de la barre de titre


108

J'ai un comportement étrange dont je ne peux pas identifier la source.

J'ai mon application avec le classique

requestWindowFeature(Window.FEATURE_NO_TITLE);

pour supprimer la barre de titre / d'état.

Je crée ensuite une boîte de dialogue pour permettre à l'utilisateur de saisir des informations (nom, etc.)

Avec un clavier physique, pas de problème mais quand j'utilise le clavier virtuel j'ai un comportement étrange:

chaque fois que j'appuie sur une touche du clavier virtuel, la barre de titre / d'état réapparaît, poussant toute la disposition du clavier, puis disparaît à nouveau (tout comme l'animation du moment où je lance l'application)

voici un code:

        dialog = new Dialog(context);
        dialog.setContentView(R.layout.logindialog);
        dialog.setTitle("Login:");

        WindowManager.LayoutParams a = dialog.getWindow().getAttributes();

//      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        a.dimAmount = 0;
        dialog.getWindow().setAttributes(a);

        dialog.setCancelable(true);
        dialog.getWindow().setLayout(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);

puis

dialog.show();

j'ai essayé

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

mais cela plante mon application.

voici le xml

    <TextView android:id="@+id/LoginText"
        android:gravity="fill"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login:">
    </TextView>         
    <EditText android:id="@+id/LoginEdit"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="jason"
        android:layout_width="200sp"/>
    <TextView android:id="@+id/PasswordText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password:">
    </TextView>         
    <EditText android:id="@+id/PasswordEdit"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="welcome"
        android:layout_width="200sp"
        android:password="true"/>
<LinearLayout 
    android:id="@+id/test2"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
<Button android:id="@+id/LoginButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="Login" />
<Button android:id="@+id/CreateButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="Create" />
<Button android:id="@+id/CancelLogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="Cancel" />
</LinearLayout>/>


Publiez votre logcat lorsque vous utilisez dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); également lors de l'utilisation de la ligne de code ci-dessus, n'utilisez pas dialog.setTitle ("Login:");
ingsaurabh

Merci pour la suggestion mais ce n'est pas le problème. ce qui se passe, c'est que lorsque je tape quelque chose avec le clavier, la barre d'état continue d'apparaître et de disparaître à chaque coup de touche.
Jason Rogers

Réponses:


434

utilisation,

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //before     
dialog.setContentView(R.layout.logindialog);

Merci pour la suggestion mais ce n'est pas le problème. ce qui se passe, c'est que lorsque je tape quelque chose avec le clavier, la barre d'état continue d'apparaître et de disparaître à chaque coup de touche.
Jason Rogers

9
Sur certains appareils, la disposition de la boîte de dialogue perd sa largeur, mais garde sa hauteur. J'ai trouvé que l'ajout de cela avant .show () le corrigeait même s'ils étaient déjà définis dans la mise en page xml. dialog.getWindow (). setLayout (WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
a54studio

1
Dans le cas de l'héritier de DialogFragment, nous devons mettre à l' getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);intérieur onCreateView.
Anton Holovin

1
Si vous utilisez AppCompatDialog, utilisez: dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
Firzen

24

créer un nouveau style dans styles.xml

<style name="myDialog" parent="android:style/Theme.Dialog">
   <item name="android:windowNoTitle">true</item>
</style>

puis ajoutez ceci à votre manifeste:

 <activity android:name=".youractivity" android:theme="@style/myDialog"></activity>

14

Toutes les réponses ci-dessus ne fonctionnent pas pour moi pour AppCompatDialog

Si vous utilisez AppCompatDialog, essayez ceci

Remarque importante: définissez ceci avant d'appeler setContentView.

dialog.supportRequestWindowFeature (Window.FEATURE_NO_TITLE);


Merci, c'était mon problème, qui me rendait fou.
gregko

5

créez votre XML qui est affiché dans la boîte de dialogue ici c'est activity_no_title_dialog

final Dialog dialog1 = new Dialog(context);
dialog1.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog1.setContentView(R.layout.activity_no_title_dialog);
dialog1.show();

2

Vous pouvez également définir le thème dans le fichier manifeste Android pour ne pas afficher la barre de titre.

Vous définissez simplement le thème android:theme="@android:style/Theme.Light.NoTitleBar"dans l'activité où vous ne voulez pas afficher la barre de titre

Exemple:-

    <uses-sdk android:minSdkVersion="4"android:targetSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".splash"
              android:label="@string/app_name" android:screenOrientation="portrait"
              android:theme="@android:style/Theme.Light.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<activity android:name="main" android:screenOrientation="portrait" android:theme="@android:style/Theme.Light.NoTitleBar"></activity>


J'ai déjà une activité sans la barre d'état, mais lorsque je tape sur le clavier virtuel, la barre d'état apparaît et disparaît (en poussant toute la mise en page) comme lorsque vous démarrez l'activité et que la barre d'état disparaît. seulement cette fois, c'est à chaque fois que je touche le clavier
Jason Rogers

2

si vous utilisez une vue personnalisée, rappelez-vous de demander la fonction de fenêtre avant d'ajouter une vue de contenu comme celle-ci

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();

1

utilisez le code ci-dessous avant de définir le contenu: -

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.custom_dialog);

Remarque: - le code ci - dessus doit être utilisé ci-dessusdialog.setContentView(R.layout.custom_dialog);

En XML, utilisez un thème

android:theme="@android:style/Theme.NoTitleBar"

aussi styles.xml:

<style name="hidetitle" parent="android:style/Theme.Dialog">
   <item name="android:windowNoTitle">true</item>
</style>

Puis:

Dialog dialog_hidetitle_example = new Dialog(context, R.style.hidetitle);

1

Je suis un novice d'Android et je suis tombé sur cette question en essayant de me débarrasser d'une barre de titre.

J'utilise une activité et je l'affiche sous forme de boîte de dialogue. Je fouinais avec des thèmes et suis tombé sur un peu de thème par défaut utile.

Voici le code de mon AndroidManifest.xmlque j'utilisais lorsque la barre de titre était affichée:

<activity
    android:name=".AlertDialog"
    android:theme="@android:style/Theme.Holo.Dialog"

    >

</activity>

Voici le changement qui m'a donné le résultat souhaité:

<activity
    android:name=".AlertDialog"
    android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"

    >

</activity>

Comme je l'ai dit, je suis encore nouveau sur Android, donc cela peut avoir des effets secondaires indésirables, mais cela semble m'avoir donné le résultat que je souhaitais, à savoir simplement supprimer la barre de titre de la boîte de dialogue.


1

J'utilise la variante suivante:

Activité de ma boîte de dialogue personnalisée:

public class AlertDialogue extends AppCompatActivity {

    Button btnOk;
    TextView textDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_alert_dialogue);

        textDialog = (TextView)findViewById(R.id.text_dialog) ;
        textDialog.setText("Hello, I'm the dialog text!");

        btnOk = (Button) findViewById(R.id.button_dialog);
        btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

activity_alert_dialogue.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    tools:context=".AlertDialogue">

    <TextView
        android:id="@+id/text_dialog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="24dp"
        android:text="Hello, I'm the dialog text!"
        android:textColor="@android:color/darker_gray"
        android:textSize="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button_dialog"
        android:layout_width="wrap_content"
        android:layout_height="36dp"
        android:layout_margin="8dp"
        android:background="@android:color/transparent"
        android:text="Ok"
        android:textColor="@android:color/black"
        android:textSize="14dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_dialog" />


</android.support.constraint.ConstraintLayout>

Manifeste:

<activity android:name=".AlertDialogue"
            android:theme="@style/AlertDialogNoTitle">
</activity>

Style:

<style name="AlertDialogNoTitle" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowNoTitle">true</item>
</style>

1

Avec la variante suivante, je n'ai aucune réaction:

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //before     
dialog.setContentView(R.layout.logindialog);

Alors, j'essaye d'utiliser ensuite:

dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE); //before     
dialog.setContentView(R.layout.logindialog);

Cette variante fonctionne très bien.


0

Cela a fonctionné pour moi.

Dailog dialog = new Dialog(MyActivity.this, R.style.dialogstyle);

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="dialogstyle" parent="android:style/Theme.Dialog">
        <item name="android:windowBackground">@null</item>
        <item name="android:windowNoTitle">false</item>
    </style>
</resources>

0

Vous pouvez essayer cette simple bibliothèque contextuelle de dialogue Android . Il est très simple à utiliser sur votre activité.

Lorsque le bouton d'envoi est cliqué, essayez de suivre le code après avoir inclus la lib ci-dessus dans votre code

Pop.on(this)
   .with()
   .title(R.string.title) //ignore if not needed
   .icon(R.drawable.icon) //ignore if not needed
   .cancelable(false) //ignore if not needed
   .layout(R.layout.custom_pop)
   .when(new Pop.Yah() {
       @Override
       public void clicked(DialogInterface dialog, View view) {
           Toast.makeText(getBaseContext(), "Yah button clicked", Toast.LENGTH_LONG).show();
       }
   }).show();

Ajoutez une ligne dans votre note et vous êtes prêt à partir

dependencies {
    compile 'com.vistrav:pop:2.0'
}

0
**write this before adding view to dialog.**

dialog1.requestWindowFeature (Window.FEATURE_NO_TITLE);

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.