Android对话框:删除标题栏

我有一个奇怪的行为,我不能确定的来源。

我有我的经典应用程序

requestWindowFeature(Window.FEATURE_NO_TITLE); 

删除标题/状态栏。

然后我创build一个对话框让用户input信息(名称等)

用一个物理键盘,没问题,但是当我使用虚拟键盘时,我有一个奇怪的行为:

每当我按下虚拟键盘上的按键时,标题/状态栏会重新出现,推动所有的键盘布局,然后再次消失(就像我启动应用程序时的animation一样)

这里是一些代码:

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

使用,

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

在styles.xml中创build新的样式

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

然后将其添加到您的清单:

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

创build你的对话框中显示的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(); 

以上所有答案都不适用于我的AppCompatDialog

如果你正在使用AppCompatDialog,试试这个

重要提示:在调用setContentView之前设置它。

dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

你也可以在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> 

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

我是一个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新手,所以这可能有不良的副作用,但它似乎给了我想要的结果,这只是从对话框中删除标题栏。

如果您正在使用自定义视图,那么在添加内容视图之前请记住请求窗口function

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

这对我有效。

 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> 

你可以试试这个简单的android对话框popup库 。 在您的活动中使用非常简单。

点击提交button后,在你的代码中包含上面的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' }