更改首选项的背景颜色

时间:2010-08-23 19:54:05

标签: android android-emulator

我有一个PreferenceCategory,xml文件,我已经在其中定义了所有首选项,我从扩展PreferenceActivity的类中调用它。我无法设置我的设置屏幕的背景,此屏幕显示在下面显示的xml文件的帮助下。请注意我已经定义了android:background="#041A37",屏幕仍然是默认颜色:黑色。

public class MyPreferenceActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Context mContext=super.getBaseContext();
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.preference);
        //v.setBackgroundColor(Color.rgb(4, 26, 55));
    }
}

preference.xml是

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#041A37" >

    <PreferenceCategory>
        <com.dropcall.SeekBarPreference
            android:background="#041A37"
            android:defaultValue="5"
            android:key="@string/Interference_Delay"
            android:progressDrawable="@drawable/seekbardrawable"
            android:title="Seconds Delay until intereference" />

        <com.dropcall.SeekBarPreference2
            android:defaultValue="30"
            android:key="@string/Drop_Delay"
            android:progressDrawable="@drawable/seekbardrawable"
            android:title="Seconds delay until drop" />

        <CheckBoxPreference
            android:background="@drawable/state_normal"
            android:defaultValue="true"
            android:key="@string/Drop_Option"
            android:title="Close after call drop" />
        <CheckBoxPreference
            android:background="@drawable/state_normal"
            android:defaultValue="true"
            android:key="@string/Timer_Option"
            android:title="Start timers on launch" />
    </PreferenceCategory>

</PreferenceScreen>

虽然我在每个文件中都设置了android:background="#041A37",但背景并没有变成深蓝色或任何其他颜色。它仍然是默认颜色,黑色。如何更改背景颜色。请告诉我任何指示/提示,如果您遇到同样的问题,请告诉我您为设置背景颜色所做的更改。

9 个答案:

答案 0 :(得分:77)

您可以定义主题,然后在清单中为PreferenceActivity设置此主题。然后,您可以根据需要定义背景颜色或windowBackground图像。

清单:

    <activity android:label="@string/app_label" android:name=".client.PreferencesActivity"
        android:theme="@style/PreferencesTheme">
        <intent-filter>                                
        </intent-filter>
    </activity>

然后将主题添加到styles.xml

<style name="PreferencesTheme">
    <item name="android:windowBackground">@drawable/background_image</item>
    <item name="android:background">#FFEAEAEA</item>
</style>

在上面的代码片段中,定义了背景颜色和背景图像以显示如何操作。

答案 1 :(得分:45)

这对我有用

getListView().setBackgroundColor(Color.TRANSPARENT);

getListView().setCacheColorHint(Color.TRANSPARENT);

getListView().setBackgroundColor(Color.rgb(4, 26, 55));

答案 2 :(得分:21)

就颜色而言,另一种解决方法是为首选项活动创建主题并同时放置列表视图的背景颜色:

<style name="PrefsTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <item name="android:windowBackground">@color/prefs_bg</item>
    <item name="android:textColor">@color/text_color</item>
    <item name="android:listViewStyle">@style/listViewPrefs</item>
</style>

<style name="listViewPrefs" parent="@android:style/Widget.ListView">
    <item name="android:background">@color/prefs_bg</item>
    <item name="android:cacheColorHint">@color/prefs_bg</item>
</style>

答案 3 :(得分:6)

根据{{​​3}},

android:background不是可用属性。

虽然我没有试过这个,但我可能会主题PreferenceActivity来实现你的颜色变化,因为我希望我的偏好看起来像Android的其他部分,以提高应用的可用性。

答案 4 :(得分:4)

或者您也可以将drawable作为背景:

  

getListView()<击> setBackgroundDrawable (getResources()getDrawable(R.drawable.bluegradient)。);

注意: setBackgroundDrawable()已弃用。请改用setBackground()

  

getListView()的setBackground(getResources()getDrawable(R.drawable.bluegradient)。);

答案 5 :(得分:1)

我遇到了同样的要求(设置片段的 Androidx 首选项屏幕背景)。

下面的代码在一个片段中对我有用。 (在 themes.xml 中)。我认为它也适用于一项活动。

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        ...............
       <!-- Add below -->
        <item name="preferenceTheme">@style/preference</item>
    </style>
    
    <style name="preference" parent="Theme.AppCompat">
        <item name="android:background">@color/purple_200</item>
    </style>
</resources>

答案 6 :(得分:0)

请指定附加了textview的线性布局并指定背景颜色,并使用layout属性将此xml附加到preferencecategory。

<PreferenceCategory
     android:layout="@layout/preftitle"
 >

其中preftitle是一个xml,它具有线性布局和附加的文本视图。

答案 7 :(得分:0)

转到#Make an array of Fibonacci numbers till 4 million r=2 i=1 fibo=[1] s=0 t=0 for r in 1..4000000 r=fibo[i] t=fibo[i-1] s=r+t r+=s i+=1 end puts fibo 并将此代码添加到res>values>styles.xml>     风格应该是app基础主题      在此<style > </style>中是添加到颜色的颜色资源。

@color/activ

如果您使用样式标记的<style name="app_theme" parent="@android:style/Theme"> <item name="android:windowBackground">@color/activ</item> <item name="android:windowContentOverlay">@drawable/title_bar_shadow</item> <item name="android:listViewStyle">@style/TransparentListView</item> </style> 名称     然后像这样添加到您的清单

app_theme

如果您只想更改背景

答案 8 :(得分:0)

我正在使用PreferenceFragmentCompat,以下解决方案对我有用。

SettingsScreen

import android.os.Bundle
import android.util.TypedValue
import android.view.View
import androidx.annotation.ColorInt
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.almarai.easypick.R


class SettingsScreen : PreferenceFragmentCompat(), 
Preference.OnPreferenceChangeListener {

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

//Providing the XML file for the view to be created
setPreferencesFromResource(R.xml.app_settings_preferences, rootKey)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

//Get the Theme specific color
val typedValue = TypedValue()
val theme = requireContext().theme

/*R.attr.colorBackgroundScreenBody is my own attr from attrs.xml file, 
you can directly use R.color.red - Or any color from your colors.xml 
file if you do not have multi-theme app.*/
theme.resolveAttribute(R.attr.colorBackgroundScreenBody, typedValue, true)
@ColorInt val color = typedValue.data

view.setBackgroundColor(color)

super.onViewCreated(view, savedInstanceState)
}
}