重写字体样式 - Android

时间:2014-09-14 20:08:18

标签: android android-layout

我有一个简单的活动布局,它有一个imageview和几个文本框。我已将所有字体设置为Helvetica Light,并且还为每个框指定了颜色。在IDE中,我看到了这些元素所需的颜色/字体,但是当我在Android手机上构建并启动应用程序时,没有应用任何样式...所有颜色都是默认的黑色,字体也是默认的android字体。

我错过了任何房产吗?请帮忙!谢谢!

ActivityScreen.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/white"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:fontFamily="Helvetica Light" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="62dp"
        android:scaleType="fitXY"
        android:src="@drawable/whitelogoshort"
        tools:ignore="ContentDescription" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:fontFamily="Helvetica Light"
        android:text="Hello"
        android:textColorLink="@color/grey"
        android:textSize="23sp"
        tools:ignore="HardcodedText" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="88dp"
        android:fontFamily="Helvetica Light"
        android:text="Swipe to continue"
        android:textColorHint="@color/lightgrey"
        android:textColorLink="@color/lightgrey"
        tools:ignore="HardcodedText" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp"
        android:fontFamily="Helvetica Light"
        android:text="Hello again"
        android:textColorLink="@color/grey"
        android:textSize="18sp"
        tools:ignore="HardcodedText" />

</RelativeLayout>

背后的课程如下:

public class WelcomeScreen extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activityscreen); 
    }
}

THEME在manifest.xml文件中设置为:

android:theme="@android:style/Theme.Light.NoTitleBar"

作为应用程序标记的一部分。

为什么我运行应用程序时没有应用我的字体样式?

谢谢!

3 个答案:

答案 0 :(得分:1)

只需在根布局上调用此函数即可应用onCreate()中的字体。它以递归方式查找textview的每个实例并更改字体。我假设您的字体文件位于名为“font”的子文件夹中的assets文件夹中。跳过组只允许您跳过任何你不想要的组ID,所以如果你想跳过一个linearlayout然后传入数组列表R.id.mylinearlayout ...但是在你的情况下你想要做整个布局所以只为passgroups传入null。

public void applyFonts(final ViewGroup root, final String fontName,
        final ArrayList<Integer> skipGroups, final Context context) {

    if (skipGroups != null && skipGroups.contains(root.getId())) {
        return;
    }

    final int childCount = root.getChildCount();

    for (int i = 0; i != childCount; ++i) {
        final View child = root.getChildAt(i);
        if (child instanceof TextView) {
        Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/"+fontName);
            ((TextView) child).setTypeface(font);

        }
        if (child instanceof ViewGroup) {
            applyFonts((ViewGroup) child, fontName,skipGroups, context);
        }

    }

答案 1 :(得分:0)

属性“fontFamily”仅用于API级别16及更高级别,您正在测试的设备的Android版本是什么?

要设置文字颜色,您需要使用android:textColor ="#somecolor"

答案 2 :(得分:0)

您不能将fontFamily与字体名称一起使用。您需要使用setTypeface方法以编程方式更改字体。