有什么方法可以更改整个 Android 应用程序的字体吗?我知道更改每个 TextView 和按钮的字体。我只是想知道是否有更优雅的方法,因为我正在处理的程序有大量的布局文件:(
问问题
174 次
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
将影响整个应用程序的元素/组件。textColorSecondary
textColorTertiary
于 2013-05-28T07:37:21.190 回答