在片剂的偏好的白色背景

时间:2012-12-09 12:01:26

标签: android background preferenceactivity android-theme

我正在设置我的偏好活动的背景,所以我在styles.xml中写了一个样式

<style 
   name="PreferencesTheme" 
   parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
   <item name="android:windowBackground">@drawable/background</item>
</style>

并在活动中

  <activity
          android:name="com.phonelight.realparrot.MainActivity"
          android:label="Real Parrot"
          android:screenOrientation="portrait"
          android:theme="@style/PreferencesTheme">
       <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>

  </activity>

我在两个设备的模拟器上运行它。第一个是手机,第二个是平板电脑。 mobile phone Tablet

为什么平板电脑上不显示背景图像。只有很小的差距。我在真正的平板电脑上运行它,整个屏幕也是白色的。

3 个答案:

答案 0 :(得分:0)

我想你想要使用不同的主题。我不确定为什么两者之间存在差异,但我怀疑API的细微差别。

<style 
   name="PreferencesTheme" 
   parent="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
   <item name="android:windowBackground">@drawable/background</item>
</style>

答案 1 :(得分:0)

我通过添加偏好活动

来解决问题
preference.setBackgroundResource(R.xml.background);

答案 2 :(得分:0)

我偶然发现了平板电脑的这个问题,但是yasserbn的答案并没有帮助我,也就是说没有什么迹象......

preference.setBackgroundResource(R.xml.background);

......正在接受调查。

在Android大屏幕上,PreferenceActivity重新启动以显示片段中的首选项。出现这个问题是因为我们无法更改此片段容器的背景,因为它的布局ID com.android.internal.R.id.prefs_frame是私有的。

解决方法是以递归方式清除所有子视图的背景,因为我们始终可以获得根视图:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ThemeManager.setTheme(this);
    super.onCreate(savedInstanceState);
    clearBackground(findViewById(android.R.id.content));

    // other stuff...
}

private void clearBackground(View view) {
    view.setBackgroundResource(0);
    if (view instanceof ViewGroup) {
        ViewGroup viewGroup = (ViewGroup) view;
        for (int i = 0; i < viewGroup.getChildCount(); i++)
            clearBackground(viewGroup.getChildAt(i));
    }
}

这并不完美,即如果您的任何偏好使用带有背景的自定义视图,尽管这种情况不太可能。