Diálogo de Android: eliminar la barra de título


108

Tengo un comportamiento extraño del que no puedo identificar la fuente.

Tengo mi app con el clasico

requestWindowFeature(Window.FEATURE_NO_TITLE);

para eliminar la barra de título / estado.

Luego creo un cuadro de diálogo para permitir que el usuario ingrese información (nombre, etc.)

Con un teclado físico, no hay problema pero cuando uso el teclado virtual tengo un comportamiento extraño:

cada vez que presiono una tecla en el teclado virtual, la barra de título / estado reaparece presionando todo el diseño del teclado y luego desaparece nuevamente (al igual que la animación de cuando inicio la aplicación)

aquí hay un código:

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

y entonces

dialog.show();

Lo intenté

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

pero bloquea mi aplicación.

aquí está el 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>/>


Publique su logcat cuando use dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); también mientras usa la línea de código anterior, no use dialog.setTitle ("Login:");
ingsaurabh

Gracias por la sugerencia, pero no es el problema. lo que sucede es que cuando escribo algo con el teclado, la barra de estado sigue apareciendo y desapareciendo con cada pulsación de tecla.
Jason Rogers

Respuestas:


434

utilizar,

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

Gracias por la sugerencia, pero no es el problema. lo que sucede es que cuando escribo algo con el teclado, la barra de estado sigue apareciendo y desapareciendo con cada pulsación de tecla.
Jason Rogers

9
En algunos dispositivos, esto hace que el diseño del cuadro de diálogo pierda su ancho, pero mantenga su altura. Descubrí que agregar esto antes .show () lo solucionó a pesar de que ya estaban configurados en el diseño xml. dialog.getWindow (). setLayout (WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
a54studio

1
En el caso del heredero de DialogFragment, debemos poner getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);dentro onCreateView.
Anton Holovin

1
Si está utilizando AppCompatDialog, utilice: dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
Firzen

24

crear un nuevo estilo en styles.xml

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

luego agregue esto a su manifiesto:

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

14

Toda la respuesta anterior no me funciona para AppCompatDialog

Si está utilizando AppCompatDialog, intente esto

Nota importante: establezca esto antes de llamar a setContentView.

dialog.supportRequestWindowFeature (Window.FEATURE_NO_TITLE);


Gracias, ese era mi problema, volviéndome loco.
Gregko

5

crea tu XML que se muestra en el diálogo aquí es 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

También puede definir el tema en el archivo de manifiesto de Android para que no se muestre la barra de título.

Simplemente defina el tema android:theme="@android:style/Theme.Light.NoTitleBar"en la actividad donde no desea mostrar la barra de título

Ejemplo:-

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


Ya tengo una actividad sin la barra de estado, pero cuando estoy escribiendo en el teclado virtual, la barra de estado aparece y desaparece (presionando todo el diseño) al igual que cuando inicias la actividad y la barra de estado desaparece. solo que esta vez es cada vez que toco el teclado
Jason Rogers

2

si está utilizando una vista personalizada, recuerde solicitar la función de ventana antes de agregar una vista de contenido como esta

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

1

use el siguiente código antes de setcontentview: -

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

Nota: - el código anterior debe tener que usarse arribadialog.setContentView(R.layout.custom_dialog);

En XML usa un tema

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

también styles.xml:

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

Y entonces:

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

1

Soy un novato en Android y encontré esta pregunta al intentar deshacerme de una barra de título.

Estoy usando una actividad y la estoy mostrando como un diálogo. Estaba hurgando en temas y encontré un poco útil de temas predeterminados.

Aquí está el código de mi AndroidManifest.xmlque estaba usando cuando se mostraba la barra de título:

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

    >

</activity>

Aquí está el cambio que me dio el resultado deseado:

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

    >

</activity>

Como dije, todavía soy nuevo en Android, por lo que esto puede tener efectos secundarios indeseables, pero parece haberme dado el resultado que quería, que era simplemente eliminar la barra de título del cuadro de diálogo.


1

Estoy usando la siguiente variante:

Actividad de mi diálogo personalizado:

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>

Manifiesto:

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

Estilo:

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

1

Con la siguiente variante no tengo reacción:

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

Entonces, trato de usar el siguiente:

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

Esta variante funciona excelente.


0

Esto funcionó para mí.

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

Puedes probar esta sencilla biblioteca emergente de diálogo de Android . Es muy sencillo de utilizar en tu actividad.

Cuando se hace clic en el botón enviar, intente seguir el código después de incluir la biblioteca anterior en su código

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

Agrega una línea en tu gradle y listo.

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

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

dialog1.requestWindowFeature (Window.FEATURE_NO_TITLE);

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.