Android Dialog: Titelleiste entfernen

108

Ich habe ein seltsames Verhalten, dessen Quelle ich nicht genau bestimmen kann.

Ich habe meine App mit dem Klassiker

requestWindowFeature(Window.FEATURE_NO_TITLE);

um die Titel- / Statusleiste zu entfernen.

Ich erstelle dann ein Dialogfeld, in dem der Benutzer Informationen (Name usw.) eingeben kann.

Mit einer physischen Tastatur kein Problem, aber wenn ich die virtuelle Tastatur verwende, habe ich ein seltsames Verhalten:

Jedes Mal, wenn ich eine Taste auf der virtuellen Tastatur drücke, wird die Titel- / Statusleiste erneut angezeigt, wobei das gesamte Tastaturlayout verschoben wird, und verschwindet dann wieder (genau wie die Animation beim Starten der Anwendung).

Hier ist ein 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);

und dann

dialog.show();

Ich habe es versucht

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

aber es stürzt meine App ab.

Hier ist die 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>/>

Jason Rogers
quelle
Veröffentlichen Sie Ihren Logcat, wenn Sie dialog.requestWindowFeature (Window.FEATURE_NO_TITLE) verwenden. Verwenden Sie auch bei Verwendung der obigen Codezeile nicht dialog.setTitle ("Login:").
Ingsaurabh
Danke für den Vorschlag, aber es ist nicht das Problem. Wenn ich etwas mit der Tastatur tippe, wird die Statusleiste bei jedem Tastendruck angezeigt und ausgeblendet.
Jason Rogers

Antworten:

434

verwenden,

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //before     
dialog.setContentView(R.layout.logindialog);
saß
quelle
Danke für den Vorschlag, aber es ist nicht das Problem. Wenn ich etwas mit der Tastatur tippe, wird die Statusleiste bei jedem Tastendruck angezeigt und ausgeblendet.
Jason Rogers
9
Auf einigen Geräten verliert das Dialogfeldlayout dadurch seine Breite, behält jedoch seine Höhe bei. Ich fand, dass das Hinzufügen vor .show () das Problem behoben hat, obwohl sie bereits im XML-Layout festgelegt waren. dialog.getWindow (). setLayout (WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
a54studio
1
Im Fall von DialogFragment des inheritor brauchen wir setzen getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);innen onCreateView.
Anton Holovin
1
Wenn Sie AppCompatDialog verwenden, verwenden Sie: dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
Firzen
24

Erstellen Sie einen neuen Stil in styles.xml

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

Fügen Sie dies dann Ihrem Manifest hinzu:

 <activity android:name=".youractivity" android:theme="@style/myDialog"></activity>
Pratik Bhat
quelle
14

Alle oben genannten Antworten funktionieren bei AppCompatDialog nicht

Wenn Sie AppCompatDialog verwenden, versuchen Sie dies

Wichtiger Hinweis: Legen Sie dies fest, bevor Sie setContentView aufrufen.

dialog.supportRequestWindowFeature (Window.FEATURE_NO_TITLE);

Ranjith Kumar
quelle
Danke, das war mein Problem, das mich verrückt gemacht hat.
Gregko
5

Erstellen Sie Ihr XML, das hier im Dialogfeld angezeigt wird. Es ist 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();
Sagar Vaghela
quelle
2

Sie können das Thema auch in der Android-Manifestdatei definieren, damit die Titelleiste nicht angezeigt wird.

Sie definieren nur ein Thema android:theme="@android:style/Theme.Light.NoTitleBar"in einer Aktivität, in der die Titelleiste nicht angezeigt werden soll

Beispiel:-

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

Mohit Kanada
quelle
Ich habe bereits eine Aktivität ohne Statusleiste, aber wenn ich auf der Virutaltastatur tippe, wird die Statusleiste angezeigt und ausgeblendet (wobei das gesamte Layout gedrückt wird), genau wie wenn Sie die Aktivität starten und die Statusleiste verschwindet. Nur dieses Mal ist es jedes Mal, wenn ich die Tastatur berühre
Jason Rogers
2

Wenn Sie eine benutzerdefinierte Ansicht verwenden, müssen Sie die Fensterfunktion anfordern, bevor Sie eine Inhaltsansicht wie diese hinzufügen

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();
Mehroz Munir
quelle
1

Verwenden Sie den folgenden Code vor setcontentview: -

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

Hinweis: - Der obige Code muss oben verwendet werdendialog.setContentView(R.layout.custom_dialog);

Verwenden Sie in XML ein Thema

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

auch styles.xml:

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

Und dann:

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

Ich bin ein Android-Neuling und bin auf diese Frage gestoßen, als ich versucht habe, eine Titelleiste loszuwerden.

Ich verwende eine Aktivität und zeige sie als Dialog an. Ich habe mich mit Themen beschäftigt und bin auf ein nützliches Standardthema gestoßen.

Hier ist der Code von mir AndroidManifest.xml, den ich verwendet habe, als die Titelleiste angezeigt wurde:

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

    >

</activity>

Hier ist die Änderung, die mir mein gewünschtes Ergebnis gebracht hat:

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

    >

</activity>

Wie gesagt, ich bin noch neu in Android, daher kann dies unerwünschte Nebenwirkungen haben, aber es scheint mir das gewünschte Ergebnis gebracht zu haben, nämlich nur die Titelleiste aus dem Dialogfeld zu entfernen.

mbm29414
quelle
1

Ich benutze die nächste Variante:

Aktivität meines benutzerdefinierten Dialogs:

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>

Manifest:

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

Stil:

<style name="AlertDialogNoTitle" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowNoTitle">true</item>
</style>
V. März
quelle
1

Bei der nächsten Variante habe ich keine Reaktion:

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

Also versuche ich als nächstes zu verwenden:

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

Diese Variante funktioniert hervorragend.

EvgeTymo
quelle
0

Das hat bei mir funktioniert.

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>
Jasmine John
quelle
0

Sie können diese einfache Popup-Bibliothek für Android-Dialoge ausprobieren . Es ist sehr einfach für Ihre Aktivität zu verwenden.

Wenn Sie auf die Schaltfläche "Senden" klicken, versuchen Sie, den folgenden Code zu verwenden, nachdem Sie die obige Bibliothek in Ihren Code aufgenommen haben

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

Fügen Sie eine Zeile in Ihren Gradle ein und Sie können loslegen

dependencies {
    compile 'com.vistrav:pop:2.0'
}
Dharmesh Gohil
quelle
0
**write this before adding view to dialog.**

dialog1.requestWindowFeature (Window.FEATURE_NO_TITLE);

Dileep krishnan
quelle