使用 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");
}
我希望让我的一项活动看起来像一个对话框,并为其使用了一个 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");
}