2012-01-15 35 views
4

我的活動利用ActionBar.setSubtitle函數來顯示當前顯示的文件系統位置的完整路徑。這意味着,對字幕結束的子字符串比年初增加有關,所以我想我會重寫ActionBar風格在開局就ellipsize文本,而不是結束,像這樣:重寫android:操作欄上的ellipsize字幕

RES /值/themes.xml

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

RES /值/ 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> 

當我安裝此到我的ICS設備(的Nexus S),所述文本仍然(不正確)在最後被省略。如果我修改我的版本TextAppearance.Holo.Widget.ActionBar.Subtitle以包含android:textSize的項目,則字幕的文字大小會相應地改變,所以看起來好像我正在用正確的風格戳;我只是不知道爲什麼它不尊重我的android:ellipsize覆蓋。

把所有這些置於問題格式中:如何使用樣式/主題覆蓋ActionBar中字幕視圖的android:ellipsize屬性?

回答

10

在我看來,這是不可能與主題和樣式,但我找到了一種解決方法來設置運行時的ellipsize值。

最困難的是找到標題(或字幕)的TextView,因爲這個視圖的id是在內部的android包中。

所以你需要在項目中創建stub類

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; 
} 

} 

之後,你需要找到在這個代碼視圖(我這樣做是用下面的代碼,它的工作原理都與福爾摩斯和默認爲其他動作)

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; 
} 
} 

現在,您可以設置活動代碼ellipsize值:

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

PS: 請確保您在標題可見時(在setDisplayShowTitleEnabled(true)調用後)調用getActionBarTitle,否則您將得到NullPointerException。

PPS: 如果使用ProGuard的混淆,你應該增加在proguard.cfg:

-keep class com.android.internal.R*{ 
    *; 
} 
+2

這似乎是一個更好的方式去TextView的參考:HTTP://blog.wu-man。 com/2011/12/actionbar-api-provided-by-google-on.html避免創建'R'類... – poshaughnessy 2012-12-13 14:56:11

+0

@poshaughnessy我想我喜歡你使用'Resources#getIdentifier()'鏈接的方法有點比添加一個虛假的Android內部類到一個項目。 – slyfox 2013-01-17 20:40:00