Android Dialog: удаление строки заголовка - PullRequest
105 голосов
/ 07 июня 2011

У меня странное поведение, я не могу точно определить источник.

У меня есть приложение с классическим

requestWindowFeature(Window.FEATURE_NO_TITLE);

для удаления заголовка / строки состояния.

Затем я создаю диалоговое окно, позволяющее пользователю вводить информацию (имя и т. Д.)

С физической клавиатурой проблем нет, но когда я использую виртуальную клавиатуру, у меня странное поведение:

каждый раз, когда я нажимаю клавишу на виртуальной клавиатуре, появляется заголовок / строка состояния, толкая всю раскладку клавиатуры, а затем снова пропадает (как при запуске приложения)

вот код:

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

, а затем

dialog.show();

Я пытался

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

но мое приложение вылетает.

вот 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>/>

Ответы [ 13 ]

426 голосов
/ 07 июня 2011

использование,

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //before     
dialog.setContentView(R.layout.logindialog);
24 голосов
/ 17 ноября 2011

создайте новый стиль в styles.xml

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

и добавьте его в манифест:

 <activity android:name=".youractivity" android:theme="@style/myDialog"></activity>
13 голосов
/ 24 июня 2016

Все приведенные выше ответы не работают для меня для AppCompatDialog

Если вы используете AppCompatDialog Попробуйте это

Важное примечание: Установите это перед вызовом setContentView.

dialog.supportRequestWindowFeature (Window.FEATURE_NO_TITLE);

4 голосов
/ 25 июня 2013

создайте свой XML, который отображается в диалоговом окне, здесь это 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 голосов
/ 03 мая 2016

, если вы используете пользовательский вид, то запомните запрос окна, прежде чем добавлять вид контента, как это

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.show();
2 голосов
/ 07 июня 2011

Вы также можете определить тему в файле манифеста Android для отображения строки заголовка ..

Вы просто определяете тему android:theme="@android:style/Theme.Light.NoTitleBar" в деятельности, где вы не хотите отображать строку заголовка

Пример: -

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

1 голос
/ 06 июля 2018

Со следующим вариантом у меня нет реакции:

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

Итак, я пытаюсь использовать следующее:

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

Этот вариант отлично работает.

1 голос
/ 05 июля 2018

Я использую следующий вариант:

Активность моего настраиваемого диалога:

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>

Манифест:

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

Стиль:

<style name="AlertDialogNoTitle" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowNoTitle">true</item>
</style>
1 голос
/ 16 января 2015

Я новичок в Android и столкнулся с этим вопросом, пытаясь избавиться от строки заголовка.

Я использую действие и отображаю его в виде диалога.Я ковырялся с темами и наткнулся на полезную тему по умолчанию.

Вот код из моего AndroidManifest.xml, который я использовал, когда показывалась строка заголовка:

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

    >

</activity>

Вот изменение, которое дало мне желаемый результат:

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

    >

</activity>

Как я уже сказал, я все еще новичок в Android, так что это может иметь нежелательные побочные эффекты, но, похоже, дало мне результат, который яхотел, чтобы просто удалить строку заголовка из диалога.

1 голос
/ 17 июня 2013

используйте приведенный ниже код перед setcontentview: -

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

Примечание: - вышеуказанный код должен использовать выше dialog.setContentView(R.layout.custom_dialog);

При использовании XMLтема

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

также styles.xml:

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

А затем:

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