Question

Mon activité utilise le ActionBar.setSubtitle Fonction Pour afficher le chemin complet de l'emplacement du système de fichiers actuellement affiché. Cela signifie que la sous-chaîne vers la fin du sous-titre est plus pertinente que le début, alors j'ai pensé l'emporter sur le ActionBar Style pour Ellipsize Text au début, plutôt que la fin, comme ainsi:

res / valeurs / themes.xml

<style name="Theme.Holo" parent="android:Theme.Holo">
    <!-- Action bar styles -->
    <item name="android:actionBarStyle">@style/Widget.Holo.ActionBar</item>
</style>

res / valeurs / styles.xml

<style name="Widget.Holo.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:subtitleTextStyle">@style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item>
</style>

<style name="TextAppearance.Holo.Widget.ActionBar.Subtitle"
       parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle">
    <item name="android:ellipsize">start</item>
</style>

Lorsque j'installe ceci sur mon appareil ICS (Nexus S), le texte est toujours (incorrectement) ellipsédé à la fin. Si je modifie ma version de TextAppearance.Holo.Widget.ActionBar.Subtitle Inclure un article pour android:textSize, la taille du texte du sous-titre est modifiée en conséquence, il semblerait donc que je pousse dans le bon style; Je ne peux pas comprendre pourquoi il ne d'honore pas mon android:ellipsize passer outre.

Pour mettre tout cela dans un format de question: comment puis-je remplacer, en utilisant des styles / thèmes, le android:ellipsize propriété de la vue de sous-titre dans le ActionBar?

Était-ce utile?

La solution

Il me semble que ce n'est pas possible avec les thèmes et les styles, mais j'ai trouvé une solution de contournement pour définir la valeur EllipSize dans l'exécution.

Le plus difficile est de trouver TextView de titre (ou de sous-titre), car l'ID de cette vue est dans le package Android interne.

Vous avez donc besoin de créer une classe de stub dans votre projet

package com.android.internal;

public class R {

public static final class id {
    public static int action_bar_title = 0;
    public static int action_bar_subtitle = 0;
}

}

Après cela, vous devez trouver cette vue dans le code (je le fais avec le code suivant, il fonctionne à la fois avec Sherlock et les barres d'action par défaut)

public class ActionBarUtils {

public static TextView getActionbarTitle(Activity activity) {

    TextView title = (TextView) activity.findViewById(R.id.abs__action_bar_title);// for ActionBarSerlock
    if (title == null) title = (TextView) activity.findViewById(com.android.internal.R.id.action_bar_title);// for default action bar

    return title;
}
}

Vous pouvez maintenant définir la valeur EllipSize dans le code d'activité:

getActionBarTitle().setEllipsize(TextUtils.TruncateAt.MIDDLE)

PS: Assurez-vous que vous appelez getActionBartitle lorsque le titre est visible (après SetDisplayShowTitleenabled (true) Call), sinon vous obtiendrez NullPointerException.

PPS: Si vous utilisez une obscurcissement progressive, vous devez ajouter dans Proguard.cfg:

-keep class com.android.internal.R*{
    *;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top