2

有什么方法可以更改整个 Android 应用程序的字体吗?我知道更改每个 TextView 和按钮的字体。我只是想知道是否有更优雅的方法,因为我正在处理的程序有大量的布局文件:(

4

3 回答 3

1

要在整个应用程序中应用相同的字体效果,您需要创建自己的自定义 TextView 和应用了自定义字体的 Button 类。并在您的布局中将它们用作普通视图。

public class MinnesotaTextView extends TextView{

    public MinnesotaTextView(Context context) {
        super(context);
        if(!isInEditMode()){
            textViewProprties(context);
        }
    }

    public MinnesotaTextView(Context context, AttributeSet attrs){
        super(context, attrs);
        if(!isInEditMode()){
            textViewProprties(context);
        }
    }

    public MinnesotaTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if(!isInEditMode()){
            textViewProprties(context);
        }
    }

    private void textViewProprties(Context context){
        Typeface tfs = Typeface.createFromAsset(context.getAssets(), "Helvetica.ttf");
        setTypeface(tfs);
        setMaxLines(4);
    }
}

这是按钮:

public class MinnesotaButton extends Button {

    public MinnesotaButton(Context context){
        super(context);
        if(!isInEditMode()){
            buttonProprties(context);
        }
    }

    public MinnesotaButton(Context context, AttributeSet attrs){
        super(context, attrs);
        if(!isInEditMode()){
            buttonProprties(context);
        }
    }

    public MinnesotaButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if(!isInEditMode()){
            buttonProprties(context);
        }
    }

    private void buttonProprties(Context context){      
        setPadding(0, 4, 0, 0);
        setBackgroundResource(R.drawable.bg_red_btn);
        setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
        setTextSize(13.0f);

        setTextColor(context.getResources().getColor(R.color.white));
        Typeface tfs = Typeface.createFromAsset(context.getAssets(), "garreg.ttf");
        setTypeface(tfs,1);
    }   
}
于 2013-05-28T07:34:38.947 回答
0

有两种方法可以做到这一点,具体取决于您需要多少控制:

1)您可以在styles.xml中创建自定义样式属性,例如:

<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">#00FF00</item>
    <item name="android:typeface">monospace</item>
</style>

请记住,这是一种非常有限的方法,样式可能不会包含您需要的所有内容。

2) 您可以创建 TextView 和 Button 的子类,并将您的样式代码放入它们的构造函数中。我推荐这种方式,因为您可以使用您可能需要的任何自定义资产。(我刚刚看到 Nasser 打败了我的代码示例,检查一下 - 看起来不错)

于 2013-05-28T07:36:48.077 回答
0

您可以使用与主题相关的多个属性来修改应用程序的默认字体颜色。

这是主题 Holo Light 的示例,您必须首先更改清单文件以调用您的自定义主题,然后在文件 styles.xml 中自定义您的自定义主题。

这是您需要更改以调用自定义主题的清单文件的一部分(此处调用的自定义主题是AppTheme

<application
    android:name="YourApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

然后在您的文件styles.xml中,创建并自定义此自定义主题:

<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:textColorPrimary">@color/red</item>
    <item name="android:textColorSecondary">@color/blue</item>
    <item name="android:textColorTertiary">@color/yellow</item>
</style>

这 3个参数textColorPrimary将影响整个应用程序的元素/组件。textColorSecondarytextColorTertiary

于 2013-05-28T07:37:21.190 回答