Android PreferenceScreen标题栏删除

时间:2012-08-27 15:00:50

标签: android settings preferenceactivity

我想摆脱偏好活动中的顶部标题栏和所有子屏幕。 我面临的问题现在不会出现在果冻豆上,而是出现在旧版本上。 如果我不能删除它,我想改变它的行为,所以子屏幕中的标题不会从列表项目转移。

我没有在此屏幕中设置任何标题,系统从父屏幕复制了文本属性。父屏幕上的标题已由root preferencecategory上的setTitle()设置。问题存在于2.3.6

enter image description here

enter image description here

5 个答案:

答案 0 :(得分:3)

在AndroidManifest中使用它:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

答案 1 :(得分:1)

正如您所注意到的,此问题已在最近的Android版本中修复。它是由嵌套首选项被硬编码以始终使用框架中的内部ThemeTheme_NoTitleBar的错误引起的。在姜饼发布后的某个时间,commit that fixed the bug显然已合并。

解决此错误的最简单方法(仅删除不需要的标题文本)是向onPreferenceClickListener对象添加PreferenceScreen并将标题设置为null。对于您发布的代码,它的外观如下:

    particleSettings.setLayoutResource(R.layout.iconpreferencee);
    particleSettings.setKey("screen_preference");
    particleSettings.setTitle(Html.fromHtml("" + "Particles" + ""));
    particleSettings.setSummary(Html.fromHtml("<font color=\"#7c71d8\">"
            + "Count , type , color , size, gitter ... " + "</font>"));
    // workaround for Android bug 5351628
    particleSettings.setOnPreferenceClickListener(
            new OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference pref) {
                    final PreferenceScreen screen = (PreferenceScreen) pref;
                    screen.getDialog().setTitle(null);
                    return false;
                }
            });

希望它有所帮助! :)

答案 2 :(得分:0)

以下对我有用:

将每个首选项创建为单独的XML和单独的Activity!这将阻止继承此类属性。

然后您可以从父偏好中调用子偏好,如下所示:

<Preference
    android:key="TODO"
    android:title="@string/TODO"
    android:summary="@string/TODO"
>
    <intent
        android:action="com.example.project.preference.child1" />
</Preference>

您的孩子偏好应该在Manifest上定义相同的动作

<action android:name="com.example.project.preference.child1" />

确保 com.example.project.preference.child1 是唯一的!

现在,在values / styles.xml上,添加:

<style name="app_theme_no_title_pref" parent="android:Theme.Light">
    <item name="android:windowNoTitle">true</item>
</style>

当然,您可以将 android:Theme.Light 更改为您需要的任何内容。

在Manifest上,将其添加到所有Preferences Activity,parent和children:

android:theme="@style/app_theme_no_title_pref"

因此,在您的Manifest中,您的孩子偏好活动应该如下所示:

<activity android:name=".TODO"
    android:label="@string/TODO"
    android:theme="@style/app_theme_no_title_pref">
    <intent-filter>
        <action android:name="com.example.project.preference.child1" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

答案 3 :(得分:-1)

在你的java文件中使用它:

requestWindowFeature(Window.FEATURE_NO_TITLE);

答案 4 :(得分:-1)

你可以先尝试删除标题:添加一个超类,比如(例如):

public class FullScreenActivity extends Activity

在FullScreenActivity中,添加方法:

    private void addFlags() {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);


    this.getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN
                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);


    Log.d(TAG, "add flags");
}

并在FullScreenActivity的创建上调用此方法

所以......

您可以执行您的活动,所有子类可能都是标记的FullScreen。

public class MyActivity extends FullScreenActivity

尝试这个来测试解决...你可以为每个Activity设置setTitle(如果没有,使用超类标题)。