2013-04-11 117 views
2

是否可以在Android應用程序中使每一個文本位大一點,模仿在全局設置屏幕中更改默認字體大小時發生的情況?我希望用戶可以在設置屏幕中選擇字體大小並更改所有文本,而無需在我的單獨屏幕上添加額外的樣式標籤。使用Android的主題更改應用寬字體大小

我有三個主題,到目前爲止其正確更改字體大小TextView的但不喜歡的東西EditText,或ListView元素

<style name="AppThemeSmall" parent="AppTheme"> 
    <item name="android:textViewStyle">@android:style/TextAppearance.Small</item> 
    <item name="android:textAppearance">@android:style/TextAppearance.Small</item> 
</style> 

<style name="AppThemeMedium" parent="AppTheme"> 
    <item name="android:textViewStyle">@android:style/TextAppearance.Medium</item> 
    <item name="android:textAppearance">@android:style/TextAppearance.Medium</item> 
</style> 

<style name="AppThemeLarge" parent="AppTheme"> 
    <item name="android:textViewStyle">@android:style/TextAppearance.Large</item> 
    <item name="android:textAppearance">@android:style/TextAppearance.Large</item> 
</style> 

回答

0

創建從一個基本的小部件擴展自己的自定義窗口小部件。初始化期間從共享首選項中檢索字體設置。我猜你會在設置改變時將它存儲在那裏。在初始化期間,小部件的文本大小被設置爲存儲的設置。在代碼:

public class MyCustomTextView extends TextView { 

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

    public MyCustomTextView(Context context) { 
     super(context); 
     init(context, null); 
    } 

    private void init(Context context, AttributeSet attrs) { 

     float size = .... // retrieve from your shared preferences 
     setTextSize(size); 
    } 
} 

這樣可以延長它們具有TEXTSIZE屬性的所有部件和初始化過程中更改它。

+0

謝謝,我最終沒有做到這一點,但我已經按照您的建議將主題存儲在首選項中。 – 2013-04-17 10:31:20

4

我最終將樣式添加到xml,它感覺更乾淨,我有更多的控制。

每個佈局XML(INC。的EditText,AutoCompleteTextView)

<TextView 
    style="?textTitle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/ref" /> 

attrs.xml

<attr name="textTitle" format="reference" /> 

styles.xml(請注意,我已經覆蓋了微調風格以及保持尺寸一致

<style name="AppTheme.Small"> 
    <item name="textTitle">@style/small_title_text</item> 
    <item name="android:spinnerItemStyle">@style/spinner_small</item> 
</style> 

<style name="AppTheme.Medium"> 
    <item name="textTitle">@style/medium_title_text</item> 
    <item name="android:spinnerItemStyle">@style/spinner_medium</item> 
</style> 

<style name="AppTheme.Large"> 
    <item name="textTitle">@style/large_title_text</item> 
    <item name="android:spinnerItemStyle">@style/spinner_large</item> 
</style> 


<!-- SMALL FONT SIZE --> 
<style name="small_title_text"> 
    <item name="android:textSize">15sp</item> 
    <item name="android:textStyle">bold</item> 
</style> 


<!-- MEDIUM FONT SIZE --> 
<style name="medium_title_text"> 
    <item name="android:textSize">19sp</item> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="medium_list_text"></style> 

<!-- LARGE FONT SIZE --> 
<style name="large_title_text"> 
    <item name="android:textSize">23sp</item> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="large_list_text"></style> 

<!-- SPINNER STYLES --> 
<style name="spinner_small"> 
    <item name="android:textSize">17sp</item> 
    <item name="android:paddingTop">0dip</item> 
</style> 

<style name="spinner_medium"> 
    <item name="android:textSize">21sp</item> 
    <item name="android:paddingTop">0dip</item> 
</style> 

<style name="spinner_large"> 
    <item name="android:textSize">25sp</item> 
    <item name="android:paddingTop">0dip</item> 
</style> 

然後我設定的主題是創建每次活動之前。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    PreferenceHelper mPrefs = PreferenceHelper.getInstance(this); 
    setTheme(mPrefs.getTheme()); 
    setContentView(R.layout.activity_list);