web-dev-qa-db-fra.com

Comment changer la couleur du texte de la catégorie de préférence sous Android?

L'attribut textColor ne fonctionne pas. Voici mon XML:

<PreferenceCategory
        Android:title="Title"
        Android:textColor="#00FF00">

Des idées?

24

utilisez cette classe de personnalisation PreferenceCategory:

public class MyPreferenceCategory extends PreferenceCategory {
    public MyPreferenceCategory(Context context) {
        super(context);
    }

    public MyPreferenceCategory(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyPreferenceCategory(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        TextView titleView = (TextView) view.findViewById(Android.R.id.title);
        titleView.setTextColor(Color.RED);
    }
}

et ajoutez ceci à votre fichier Pref.xml: 

<ALi.UI.Customize.MyPreferenceCategory Android:title="@string/pref_server" />
48
AliSh

Une solution consiste à créer un thème pour votre écran Préférence.

<style name="PreferenceScreen" parent="YourApplicationThemeOrNone">
    <item name="Android:textColor">@color/yourCategoryTitleColor</item>
</style>

puis dans votre AndroidManifest.xml:

<activity
      Android:name="MyPreferenceActivity"
      ...
      Android:theme="@style/PreferenceScreen" >
</activity>

Cela a fonctionné parfaitement pour moi.

29
flawyte

Une façon simple de faire cela est de définir la disposition personnalisée pour la preferenceCategory ici:

<PreferenceCategory
    Android:layout="@layout/preferences_category"
    Android:title="Privacy" >

Ensuite, définissez votre code dans votre fichier de présentation preferences_category:

<TextView
    Android:id="@Android:id/title"
    Android:textColor="@color/deep_orange_500"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textSize="16sp"
    Android:textStyle="bold"
    Android:textAllCaps="true"/>

29
Simon

Pour changer la couleur du texte de la catégorie de préférences, définissez uniquement un thème sur votre PreferenceActivity dans votre manifeste Android et vérifiez que colorAccent item existe. Cette couleur est prise par votre PreferenceCategory.

10
Efren

Vous pouvez également mentionner le thème dans votre AppTheme, niveau de l'application. 

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
        .....//your other items
        <item name="preferenceTheme">@style/PrefTheme</item>
    </style>

    <style name="PrefTheme" parent="@style/PreferenceThemeOverlay">
        <item name="preferenceCategoryStyle">@style/CategoryStyle</item>
    </style>

    <style name="CategoryStyle" parent="Preference.Category">
        <item name="Android:layout">@layout/pref_category_view</item>
    </style>

XML: pref_category_view

<?xml version="1.0" encoding="utf-8"?>
<TextView Android:id="@Android:id/title"
          style="?android:attr/listSeparatorTextViewStyle"
          xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:layout_width="match_parent"
          Android:textColor="@color/red"
          Android:layout_height="wrap_content"
    />

Pour plus de personnalisation, visitez v7 Preferences res

Important: J'utilise PreferenceFragmentCompat à partir de lib v7 Preference .

2
Bharatesh
public class MyPreferenceCategory extends PreferenceCategory {

 public MyPreferenceCategory(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
  }
 public MyPreferenceCategory(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
 public MyPreferenceCategory(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub
  }

 @Override
 protected View onCreateView(ViewGroup parent) {
    // It's just a TextView!
 TextView categoryTitle =  (TextView)super.onCreateView(parent);
 categoryTitle.setTextColor(parent.getResources().getColor(R.color.orange));

    return categoryTitle;
  }
}

Et dans votre prefs.xml:

<com.your.packagename.MyPreferenceCategory Android:title="General">
.
.
.
</com.your.packagename.MyPreferenceCategory>

Ou vous pouvez également utiliser cette réponse

2
Leebeedev

En fait, je viens de découvrir le texte de cette catégorie de préférence en utilisant colorAccent

Si votre application n'a pas utilisé le style colorAccent, vous pouvez accéder à styles.xml et rechercher 
<item name="colorAccent">@color/colorPrimary</item> et changez la couleur comme vous le souhaitez.

2
Putra Purba

Définissez votre propre thème de préférence et remplacez les couleurs.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="preferenceTheme">@style/AppTheme.PreferenceTheme</item>
</style>

<style name="AppTheme.PreferenceTheme" parent="PreferenceThemeOverlay.v14.Material">
    <item name="colorAccent">`#color_value`</item>
</style>
2
user10320258

Beaucoup des autres réponses n'ont pas fonctionné pour mon cas. J'utilise un PreferenceFragmentCompat et je ne voulais pas que le code réel le fasse. J'ai donc simplement fait une copie du fichier XML de catégorie de préférence et modifié le champ textColor. Le fichier est sous la licence Apache, version 2.

<?xml version="1.0" encoding="utf-8"?>

<!--
  ~ Copyright (C) 2015 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.Apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License -->

  <LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="8dp"
    Android:layout_marginTop="8dp"
    Android:layout_marginStart="?android:attr/listPreferredItemPaddingLeft"
    Android:orientation="vertical">
    <TextView
      Android:id="@Android:id/title"
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content"
      Android:layout_marginTop="16dp"
      Android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
      Android:textAlignment="viewStart"
      Android:textColor="@color/app_accent"
      Android:textStyle="bold"
      tools:ignore="RtlSymmetry"/>
    <TextView
      Android:id="@Android:id/summary"
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:ellipsize="end"
      Android:singleLine="true"
      Android:textColor="?android:attr/textColorSecondary"/>
  </LinearLayout>

Et importé dans ma mise en page .xml pour le fragment de préférence:

 <PreferenceCategory
    Android:layout="@layout/preference_category_companion"
    Android:key="my_preference_title"
    Android:title="@string/my_preference_title">
0
Salladsmannen