从CustomTextView更改颜色文本

时间:2015-04-29 17:05:25

标签: android textview

默认以编程方式更改textColor是:

public class CustomTextView extends TextView {

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);




    }

    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    public CustomTextView(Context context) {
        super(context);


    }

public void setTypeface(Typeface tf, int style) {

    if(!isInEditMode()) {
        if (style == Typeface.BOLD) {
            super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Lato-Bold.ttf"));
        } else if(style == Typeface.ITALIC){  // constant used to set Lato-Light.
            super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Lato-Light.ttf"));
        }else {
            super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Lato-Regular.ttf"));
        }
    }
}

我需要有一个自定义Textview来默认更改字体和颜色,如何从CustomTextView类更改textcolor,这是我的代码。

new WOW({offset: 160 }).init()

3 个答案:

答案 0 :(得分:1)

以下代码是设置默认文字颜色和字体的方法。

public class CustomTextView extends TextView {
public CustomTextView(Context context) {
    super(context);
    init(context);
}

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

public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context);
}

private void init(Context context) {
    setTypeface(Typeface.createFromAsset(context.getAssets(),"fonts/Lato-Light.ttf"));
    setTextColor(Color.RED);
}
}

每次创建文本视图时都会调用init()方法,然后在其中设置字体和颜色。您可以在那里操纵您想要的任何其他变量。

答案 1 :(得分:0)

在每个构造函数中的每个super之后使用setTextColor(Color.RED);

答案 2 :(得分:0)

第1步

在/ assets目录(不是/ resource目录)中,创建一个名为/ fonts的文件夹。在此复制您的自定义字体。您可以使用TTF和OTF字体。

第2步

在/ res / values文件夹中,创建一个名为attrs.xml的新文件。这就是Android SDK允许您为小部件命名自定义属性的方法。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyTextView">
<attr name="fontName" format="string" />
    </declare-styleable>
</resources>

第3步

在/ res / layouts中,您需要在activity_main.xml文件中包含您要创建的自定义文本视图。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customfontdemo="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:padding="12dp"
        android:text="Standard Android Font" />

     <com.authorwjf.customfontdemo.MyTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="32sp"
        android:padding="12dp"
        customfontdemo:fontName="pipe_dream.ttf"
        android:text="Custom Android Font" />

</LinearLayout>

第4步

在/ src文件夹中,您需要创建MyTextView类。它扩展了标准文本视图,从自定义属性中提取字体名称,并应用类型face。

package com.authorwjf.customfontdemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs);
    }

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

    }

    public MyTextView(Context context) {
        super(context);
        init(null);
    }

    private void init(AttributeSet attrs) {
        setTextColor(Color.RED);
        if (attrs!=null) {
             TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MyTextView);
             String fontName = a.getString(R.styleable.MyTextView_fontName);
             if (fontName!=null) {
                 Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/"+fontName);
                 setTypeface(myTypeface);
             }
             a.recycle();
        }
    }

}

第5步

由于文本视图现在是自包含的,因此您无需对我们的/src/MainAcitivity.java文件进行任何修改。

package com.authorwjf.customfontdemo;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}