1

我的应用使用 Theme.Wallpaper 系列,这意味着当前壁纸用作应用的背景。这可能会导致可读性问题(取决于用户最喜欢的壁纸),因此我希望允许用户选择图像作为背景。

我试图实现它的方式是:

@Override
protected void onResume() {
    // Get wallpaper preferences to check if user selected a wallpaper and
    // display it
    SharedPreferences wallpaperPref = getSharedPreferences(WallpaperActivity.WALLPAPER_PREFERENCES, MODE_PRIVATE);
    int selectedWallpaper = wallpaperPref.getInt(WallpaperActivity.SELECTED_WALLPAPER, 0);
    if (selectedWallpaper != 0) {
        findViewById(R.id.pager).setBackgroundResource(selectedWallpaper);
        getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(selectedWallpaper));
    } else {
        findViewById(R.id.pager).setBackgroundColor(Color.TRANSPARENT);
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
    super.onResume();
}

共享首选项包含所选壁纸的资源 ID。

我的问题是标题栏和操作栏对此没有响应。有没有办法让他们也接受新的背景?

4

2 回答 2

1
  1. 使标题栏和操作栏的背景透明。
  2. Window ActionBar Overlay设置为 true。
  3. 用 ActionBar 的高度填充主视图,这样 ActionBar 就不会覆盖任何内容。

你的 ActionBar 现在将位于背景视图之上,而不是在它之上。它将是透明的,以便让背景显示出来,并且不会被 ActionBar 覆盖。

于 2013-04-05T02:37:52.943 回答
1

感谢@Sky的帮助,这就是我最终要做的事情:

  1. 在我的应用程序样式中,我添加了这个项目:<item name="windowActionBarOverlay">true</item>这使得操作栏与我的布局重叠。这是解决原始问题的方法,但是只要布局内容重叠当然不能使用,所以这里是如何克服这个问题:

  2. 在 dimen.xml 文件中,我添加了这两个维度以用作 paddingTop 值 dimen name="actionBarSize" 56.0dip dimendimen name="actionBarWithTabsSize" 112.0dip dimen。(添加 '<' 和 '/> 到位)这些对于 API 10 及更低版本是必需的,对于 API-11 及更高?android:attr/actionBarSize版本,可以将其设置为 paddingTop 值。

  3. 在每个顶级布局上——也就是每个布局文件上的顶级元素被活动膨胀,我添加了一个 paddingTop 值,如下所示:android:paddingTop="@dimen/actionBarSize"除了在我实现了 tabbs 的布局上,我使用了android:paddingTop="@dimen/actionBarWithTabsSize".

  4. 在 xml 文件夹中的 preference.xml 文件中,我将此行添加到顶级 PreferenceScreen 元素:android:layout="@layout/activity_settings"

  5. 在布局文件夹中,我创建了一个名为“activity_settings.xml”的新布局文件。它包含一个 FrameLayout 作为顶级元素,具有此属性:android:paddingTop="@dimen/actionBarSize",并且在 FrameLayout 中有一个具有 id 的 ListView 元素android:id="@android:id/list"

  6. 在我的 PreferenceActivity 子类上,在调用addPreferencesFromResource(R.xml.preferences);我添加setContentView(R.layout.activity_settings);. 这告诉首选项活动使用 activity_settings.xml 布局文件作为它的布局,并使用 ID 为“@android:id/list”的 ListView 作为它的首选项容器。这样您就可以控制顶级布局文件以设置它的填充。

于 2013-04-06T14:38:57.160 回答