使用 Theme.AppCompat.Dialog 时操作栏看起来被切断了

Action bar looks cut while using Theme.AppCompat.Dialog

我希望让我的一项活动看起来像一个对话框,并为其使用了一个 Theme.AppCompat.Dialog 主题,但这使得它的操作栏看起来很糟糕(见下文)。

现在背景被剪切到标题字符串的长度,我找不到任何主题属性来修复它。(

如何避免它?

styles.xml的相关部分:

<style name="DeviceListTheme" parent="Theme.AppCompat.Dialog">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

我使用以下代码启动 activity:

Intent intent = new Intent(this, DeviceListActivity.class);
startActivityForResult(intent, REQUEST_CONNECT_DEVICE);

首先,当我遇到这个问题时,我尝试使用 supportRequestWindowFeature(Window.FEATURE_NO_TITLE); 但这对我不起作用并且没有效果。

删除对话框顶部栏的替代方法 activity 是创建自定义样式并将其应用于该 activity。

styles.xml 中,像这样创建一个新样式:

<style name="MyCustomDialog" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

现在,在 AndroidManifest.xml 中,将 android:theme="@style/MyCustomDialog" 添加到您的 activity。

当然,MyCustomDialog可以任意重命名。

使用 DialogWhenLarge 而不是标准的对话框样式:

<style name="MyDialogTheme" parent="@style/Theme.AppCompat.Light.DialogWhenLarge">
...
</style>

我这样解决了同样的问题:

Activity:

public class MyActivity extends android.support.v4.app.FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);
        setTitle("View task");
    }
}

主题:

<style name="Theme.MyDialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">false</item>
</style>

清单:

<activity android:name=".MyActivity" android:theme="@style/Theme.MyDialog"/>

结果:

正常工作

<style name="AppThemeDialog" parent="Theme.AppCompat.Light.Dialog">
       <item name="android:windowNoTitle">true</item>
       <item name="android:spinnerStyle">@style/holoSpinner</item>
</style>

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_search);
       setTitle("Batches");
   }