我在Nexus One上测试我的应用程序,但我遇到了一些问题。我的主题是光和 当显示内部子PreferenceScreen时,窗口背景 变为黑色,而不是保持PreferenceActivity的一个。
<PreferenceScreen android:title="main preferences">
...
<PreferenceScreen android:title="sub screen">
</PreferenceScreen>
</PreferenceScreen>
有什么问题?
的Wouter
答案 0 :(得分:2)
使用此:
在style.xml文件中创建主题
<style name="Theme.SettingsBackground" parent="@android:style/Theme.NoTitleBar">
<item name="android:windowBackground">@android:color/black</item>
</style>
然后在清单文件中使用:
<activity android:name=".Settings" android:theme="@style/Theme.SettingsBackground"></activity>
为您想要的所有子活动执行此操作。
答案 1 :(得分:1)
为了更好地理解这里发生的事情,您可以从PreferenceScreen类的源代码中引用这段代码:
@Override
protected void onClick() {
if (getIntent() != null || getPreferenceCount() == 0) {
return;
}
showDialog(null);
}
private void showDialog(Bundle state) {
Context context = getContext();
ListView listView = new ListView(context);
bind(listView);
// Set the title bar if title is available, else no title bar
final CharSequence title = getTitle();
Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title)
? com.android.internal.R.style.Theme_NoTitleBar
: com.android.internal.R.style.Theme);
dialog.setContentView(listView);
if (!TextUtils.isEmpty(title)) {
dialog.setTitle(title);
}
dialog.setOnDismissListener(this);
if (state != null) {
dialog.onRestoreInstanceState(state);
}
// Add the screen to the list of preferences screens opened as dialogs
getPreferenceManager().addPreferencesScreen(dialog);
dialog.show();
}
我解决它的方法是通过在添加到首选项屏幕的第一个首选项中覆盖onCreateView来设置父背景颜色。当然这需要一些自定义代码,但它并不是非常复杂,例如设置白色背景:
package com.justinbuser.livewallpapers;
import android.preference.PreferenceCategory;
public class VideoChooserPreferenceCategory extends PreferenceCategory{
public VideoChooserPreferenceCategory(Context context) {
super(context);
}
@Override
protected View onCreateView(ViewGroup parent)
{
parent.setBackgroundColor(0xFFFFFFFF);
return super.onCreateView(parent);
}
}
然后,您当然需要通过更改xml来使用该自定义类别,即:
<PreferenceScreen android:title="main preferences">
<PreferenceScreen android:title="sub screen">
<com.justinbuser.livewallpapers.VideoChooserPreferenceCategory android:title="sub screen category" />
</PreferenceScreen>
</PreferenceScreen>
此外,如果您注意到Android PreferenceScreen根据是否设置了标题来更改主题,即如果标题存在,则启用包含标题栏的主题。因此,如果您不需要标题栏,则应避免设置首选项屏幕标题并在xml中静态设置或通过代码动态设置。
答案 2 :(得分:1)
你试过这个吗?
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference){
super.onPreferenceTreeClick(preferenceScreen, preference);
if (preference!=null)
if (preference instanceof PreferenceScreen)
if (((PreferenceScreen)preference).getDialog()!=null)
((PreferenceScreen)preference).getDialog().getWindow().getDecorView().setBackgroundDrawable(this.getWindow().getDecorView().getBackground().getConstantState().newDrawable());
return false;
}
在PreferenceActivity
。
来自此source的评论#35。