2013-04-11 76 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);