Finestra di dialogo Android: rimozione della barra del titolo


108

Ho un comportamento strano di cui non riesco a individuare la fonte.

Ho la mia app con il classico

requestWindowFeature(Window.FEATURE_NO_TITLE);

per rimuovere il titolo / barra di stato.

Quindi creo una finestra di dialogo per consentire all'utente di inserire informazioni (nome ecc.)

Con una tastiera fisica nessun problema ma quando uso la tastiera virtuale ho uno strano comportamento:

ogni volta che premo un tasto sulla tastiera virtuale riappare la barra del titolo / stato che spinge tutto il layout della tastiera e poi scompare di nuovo (proprio come l'animazione di quando avvio l'applicazione)

ecco un po 'di codice:

        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);

e poi

dialog.show();

Provai

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

ma si blocca la mia app.

ecco l'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>/>


Pubblica il tuo logcat quando usi dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); inoltre mentre si utilizza la riga di codice sopra, non utilizzare dialog.setTitle ("Login:");
ingsaurabh

Grazie per il suggerimento ma non è il problema. quello che succede è che quando digito qualcosa con la tastiera, la barra di stato continua ad apparire e scomparire ad ogni pressione del tasto.
Jason Rogers

Risposte:


434

uso,

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

Grazie per il suggerimento ma non è il problema. quello che succede è che quando digito qualcosa con la tastiera, la barra di stato continua ad apparire e scomparire ad ogni pressione del tasto.
Jason Rogers

9
Su alcuni dispositivi questo fa sì che il layout della finestra di dialogo perda la sua larghezza, ma mantenga la sua altezza. Ho scoperto che l'aggiunta di questo prima di .show () lo ha risolto anche se erano già impostati nel layout xml. dialog.getWindow (). setLayout (WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
a54studio

1
In caso di erede di DialogFragment abbiamo bisogno di mettere getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);dentro onCreateView.
Anton Holovin

1
Se stai usando AppCompatDialog, usa: dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
Firzen

24

crea un nuovo stile in styles.xml

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

quindi aggiungi questo al tuo manifest:

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

14

Tutta la risposta di cui sopra non funziona per me per AppCompatDialog

Se stai usando AppCompatDialog prova questo

Nota importante: impostalo prima di chiamare setContentView.

dialog.supportRequestWindowFeature (Window.FEATURE_NO_TITLE);


Grazie, quello era il mio problema, facendomi impazzire.
gregko

5

crea il tuo XML che viene mostrato nella finestra di dialogo qui è 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

Puoi anche definire il tema nel file manifest di Android per non visualizzare la barra del titolo.

Devi solo definire il tema android:theme="@android:style/Theme.Light.NoTitleBar"nell'attività in cui non desideri visualizzare la barra del titolo

Esempio:-

    <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>


Ho già un'attività senza barra di stato, ma quando sto digitando sulla tastiera virtuale la barra di stato appare e scompare (spingendo tutto il layout) proprio come quando inizi l'attività e la barra di stato scompare. solo che questa volta è ogni volta che tocco la tastiera
Jason Rogers

2

se stai utilizzando una visualizzazione personalizzata, ricorda di richiedere la funzionalità della finestra prima di aggiungere la visualizzazione del contenuto come questa

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

1

usa il codice seguente prima di setcontentview: -

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

Nota: - il codice sopra deve essere utilizzato sopradialog.setContentView(R.layout.custom_dialog);

In XML usa un tema

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

anche styles.xml:

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

E poi:

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

1

Sono un principiante di Android e mi sono imbattuto in questa domanda cercando di sbarazzarmi di una barra del titolo.

Sto utilizzando un'attività e la visualizzo come una finestra di dialogo. Stavo curiosando con i temi e mi sono imbattuto in un po 'utile di temi predefiniti.

Ecco il codice del mio AndroidManifest.xmlche stavo usando quando veniva visualizzata la barra del titolo:

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

    >

</activity>

Ecco il cambiamento che mi ha fatto ottenere il risultato desiderato:

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

    >

</activity>

Come ho detto, sono ancora nuovo su Android, quindi questo potrebbe avere effetti collaterali indesiderati, ma sembra che mi abbia dato il risultato che volevo, che era solo quello di rimuovere la barra del titolo dalla finestra di dialogo.


1

Sto usando la prossima variante:

Attività della mia finestra di dialogo personalizzata:

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>

Manifesto:

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

Stile:

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

1

Con la prossima variante non ho alcuna reazione:

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

Quindi, provo a usare il prossimo:

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

Questa variante funziona in modo eccellente.


0

Questo ha funzionato per me.

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

Puoi provare questa semplice libreria popup di dialogo Android . È molto semplice da usare sulla tua attività.

Quando si fa clic sul pulsante di invio, provare a seguire il codice dopo aver incluso lib sopra nel codice

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();

Aggiungi una riga nel tuo gradle e sei a posto

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

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

dialog1.requestWindowFeature (Window.FEATURE_NO_TITLE);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.