2011-06-07 104 views
98

我有一个奇怪的行为,我无法确定的来源。Android对话框:删除标题栏

我有我的应用程序与经典

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

+0

当您使用dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)时发布您的logcat; 同时使用上面的代码行不要使用dialog.setTitle(“Login:”); – ingsaurabh 2011-06-07 10:12:56

+0

感谢您的建议,但它不是问题。发生什么事情是当我用键盘输入某些东西时,状态栏不断出现并随着每次击键而消失。 – 2011-06-07 11:01:16

回答

405

使用,

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

感谢您的建议,但它不是问题。发生什么事情是当我用键盘输入某些东西时,状态栏不断出现并随着每次击键而消失。 – 2011-06-07 11:01:10

+9

在某些设备上,这会导致对话框布局失去宽度,但保持高度。我发现在.show()之前添加了这个功能,尽管它们已经在xml布局中设置了。 dialog.getWindow()。setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT); – a54studio 2015-02-07 05:23:07

+0

在DialogFragment的继承者的情况下,我们需要将'getDialog()。requestWindowFeature(Window.FEATURE_NO_TITLE);'onCreateView'内部。 – 2017-05-15 15:05:00

2

您还可以在Android清单文件中定义的主题为不显示山雀乐吧..

你只要在活动,其中u不用想显示标题栏

例定义主题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> 

+0

我已经有一个没有状态栏的活动,但是当我在虚拟键盘上打字时,状态栏出现并消失(推动所有布局),就像开始活动时状态栏消失一样。只有这次它每次触摸键盘时 – 2011-06-07 12:19:06

22

创建新风格。的setContentView之前,下面的代码

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

使用:XML

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

然后添加到您的清单 -

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

创建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(); 
1

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

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 dialog popup library。使用您的活动非常简单。

当点击提交按钮尝试下面的代码,包括上述的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' 
} 
2

查看然后在添加内容视图之前记得请求窗口功能

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

以上所有的答案不是为我工作的AppCompatDialog

如果您正在使用AppCompatDialog试试这个

重要提示:调用的setContentView之前设置此。

dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

+0

谢谢,那是我的问题,让我发疯。 – gregko 2018-02-25 23:53:10