繁体   English   中英

时钟textview的自定义字体

[英]Custom font for clock textview

我是android开发领域的新手,我想制作一个时钟,使每一位时间都有自己的字体。 小时数字具有自己的字体,分钟数字具有其自己的字体。 我怎样才能做到这一点。 帮我。

假设您的字体名称是DemoFont 创建一个扩展TextView 并初始化DemoFont的字体。

接下来,将该字体的.ttf文件放置在assets文件夹中。

public class DemoFont extends TextView {


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

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

    public DemoFont (Context context) {
        super(context);
        init();
    }

    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                "demofont.ttf");
        setTypeface(tf);
    }

}

现在,您可以在布局文件中像这样使用它。

<YOUR_PACKAGE_NAME.DemoFont
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

首先,您需要下载一个字体文件,该文件通常是.otf格式。 然后,您需要将此字体导入到android studio或eclipse项目中的assets文件夹中。 完成此操作后,您可以创建一个新的字体并将其设置为文本视图。 就小时和分钟数字使用不同的字体而言,您需要创建具有多个文本视图的布局。 例如,您可以执行以下操作

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/hours_digit"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=": "
    android:id="@+id/time_colon"
    android:layout_toEndOf="@id/hours_digit" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@id/time_colon"
    android:id="@+id/minutes_digit"/>

</RelativeLayout>

实现此目的的另一种方法是创建自己的自定义文本视图,而不是每次都为文本视图设置字体,以便在您每次使用字体时都将其应用。 例如,对于分钟文本视图,您可以执行以下操作:

public class MinutesTextView extends TextView {

// Constructor method for the text view...
public MinutesTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(attrs);
}

// Constructor method for the text view...
public MinutesTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(attrs);

}

// Constructor method for the text view...
public MinutesTextView(Context context) {
    super(context);
    init(null);
}

// Initializes any UI properties of the text view.
private void init(AttributeSet attrs) {
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Minutes-font-file.otf");
    setTypeface(myTypeface);
}

}

和,使用之前的布局文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<com.example.yourpackage.MinutesTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/hours_digit"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=": "
    android:id="@+id/time_colon"
    android:layout_toEndOf="@id/hours_digit" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@id/time_colon"
    android:id="@+id/minutes_digit"/>

</RelativeLayout>

首先将字体复制到项目中的assets文件夹中。

对于小时Textview

public class HourTextView extends TextView {

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

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

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

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

// Initializes any UI properties of the text view.
private void init(AttributeSet attrs) {
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Hour-font-file.otf");
    setTypeface(myTypeface);
}

}

对于分钟Textview

public class MinuteTextView extends TextView {

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

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

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

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

// Initializes any UI properties of the text view.
private void init(AttributeSet attrs) {
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Minute-font-file.otf");
    setTypeface(myTypeface);
}

}

秒钟Textview

public class SecondTextView extends TextView {

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

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

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

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

// Initializes any UI properties of the text view.
private void init(AttributeSet attrs) {
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Second-font-file.otf");
    setTypeface(myTypeface);
}

}

并在xml文件中执行此操作

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

<com.yourpackage.HourTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="10"
    android:id="@+id/hourText" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text=" : " />

<com.yourpackage.MinuteTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="45 "
    android:id="@+id/minuteText" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text=" : " />

<com.yourpackage.SecondTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="28"
    android:id="@+id/secondsText" />

</LinearLayout>
public class MainActivity extends AppCompatActivity {

public TextView textView;
int countInt;
private int mInterval = 1000; // 1 second by default, can be changed later
private Handler mHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView=(TextView)findViewById(R.id.textView);

    mHandler = new Handler();
    startRepeatingTask();
}

Runnable mStatusChecker = new Runnable() {
    @Override
    public void run() {
        try {
            countInt=countInt+1;
            textView.setText(String.valueOf(countInt));
        } finally {
            mHandler.postDelayed(mStatusChecker, mInterval);
        }
    }
};

void startRepeatingTask() {
    mStatusChecker.run();
}

void stopRepeatingTask() {
    mHandler.removeCallbacks(mStatusChecker);
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM