กล่องโต้ตอบ Android: การลบแถบหัวเรื่อง


108

ฉันมีพฤติกรรมแปลก ๆ ที่ไม่สามารถระบุแหล่งที่มาได้

ฉันมีแอปคลาสสิก

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


โพสต์ Logcat ของคุณเมื่อคุณใช้ dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); ในขณะที่ใช้บรรทัดด้านบนของรหัสอย่าใช้ dialog.setTitle ("เข้าสู่ระบบ:");
ingsaurabh

ขอบคุณสำหรับข้อเสนอแนะ แต่ไม่ใช่ปัญหา สิ่งที่เกิดขึ้นคือเมื่อฉันพิมพ์บางอย่างด้วยแป้นพิมพ์แถบสถานะจะปรากฏขึ้นเรื่อย ๆ และหายไปตามจังหวะการกดแป้นแต่ละครั้ง
Jason Rogers

คำตอบ:


434

ใช้,

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

ขอบคุณสำหรับข้อเสนอแนะ แต่ไม่ใช่ปัญหา สิ่งที่เกิดขึ้นคือเมื่อฉันพิมพ์บางอย่างด้วยแป้นพิมพ์แถบสถานะจะปรากฏขึ้นเรื่อย ๆ และหายไปตามจังหวะการกดแป้นแต่ละครั้ง
Jason Rogers

9
ในอุปกรณ์บางอย่างสิ่งนี้ทำให้เค้าโครงกล่องโต้ตอบสูญเสียความกว้าง แต่คงความสูงไว้ ฉันพบว่าการเพิ่มสิ่งนี้ก่อนหน้านี้. show () ได้แก้ไขแล้วแม้ว่าจะตั้งค่าไว้ในเลย์เอาต์ xml แล้วก็ตาม dialog.getWindow (). setLayout (WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
a54studio

1
ในกรณีของการสืบทอด DialogFragment ของเราจะต้องใส่ภายในgetDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); onCreateView
Anton Holovin

1
หากคุณใช้ AppCompatDialog ให้ใช้: dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
Firzen

24

สร้างสไตล์ใหม่ใน 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>

14

คำตอบทั้งหมดข้างต้นไม่ได้ผลสำหรับฉันสำหรับ AppCompatDialog

หากคุณใช้AppCompatDialogให้ลองทำเช่นนี้

หมายเหตุสำคัญ:ตั้งค่านี้ก่อนเรียกใช้ setContentView

dialog.supportRequestWindowFeature (Window.FEATURE_NO_TITLE);


ขอบคุณนั่นคือปัญหาของฉันทำให้ฉันแทบคลั่ง
gregko

5

สร้าง 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

คุณยังสามารถกำหนด Theme ในไฟล์ manifest ของ 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>


ฉันมีกิจกรรมที่ไม่มีแถบสถานะอยู่แล้ว แต่เมื่อฉันพิมพ์บนแป้นพิมพ์ virutal แถบสถานะจะปรากฏขึ้นและหายไป (ผลักเค้าโครงทั้งหมด) เช่นเดียวกับเมื่อคุณเริ่มกิจกรรมและแถบสถานะหายไป ครั้งนี้เท่านั้นทุกครั้งที่ฉันสัมผัสแป้นพิมพ์
Jason Rogers

2

หากคุณใช้มุมมองแบบกำหนดเองให้จำไว้เพื่อขอคุณสมบัติหน้าต่างก่อนที่จะเพิ่มมุมมองเนื้อหาเช่นนี้

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

1

ใช้โค้ดด้านล่างก่อน 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);

1

ฉันเป็นมือใหม่แอนดรอยด์และเจอคำถามนี้โดยพยายามกำจัดแถบหัวเรื่อง

ฉันกำลังใช้กิจกรรมและแสดงเป็นกล่องโต้ตอบ ฉันกำลังเล่นกับธีมและเจอธีมเริ่มต้นที่เป็นประโยชน์

นี่คือรหัสจากของฉัน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

ฉันใช้ตัวแปรถัดไป:

กิจกรรมของกล่องโต้ตอบที่กำหนดเองของฉัน:

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

ด้วยตัวแปรถัดไปฉันไม่มีปฏิกิริยา:

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

ดังนั้นฉันพยายามใช้ต่อไป:

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

ตัวแปรนี้ทำงานได้ดีเยี่ยม


0

สิ่งนี้ได้ผลสำหรับฉัน

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

คุณสามารถลองใช้ไลบรารีป๊อปอัพไดอะล็อก Android ที่เรียบง่ายนี้หุ่นยนต์ห้องสมุดป๊อปอัพโต้ตอบมันง่ายมากที่จะใช้กับกิจกรรมของคุณ

เมื่อคลิกปุ่มส่งให้ลองทำตามรหัสหลังจากรวม lib ด้านบนในรหัสของคุณ

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

เพิ่มหนึ่งบรรทัดใน gradle ของคุณและคุณก็พร้อมที่จะไป

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.