简体   繁体   English

时钟textview的自定义字体

[英]Custom font for clock textview

I am new in world of android developement and I want to make a clock such that each digit of time has it's own typeface. 我是android开发领域的新手,我想制作一个时钟,使每一位时间都有自己的字体。 Hour digits has it's own typeface and minutes digit has its own typeface. 小时数字具有自己的字体,分钟数字具有其自己的字体。 How can i do this. 我怎样才能做到这一点。 Help me. 帮我。

Let's say your font name is DemoFont . 假设您的字体名称是DemoFont Make a Class which extends TextView . 创建一个扩展TextView And initialize the font for the DemoFont . 并初始化DemoFont的字体。

Next place the .ttf file of that font in the assets folder. 接下来,将该字体的.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);
    }

}

Now, In your layout file you can use this like this way. 现在,您可以在布局文件中像这样使用它。

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

First, you need to download a font file, which is usually of the .otf format. 首先,您需要下载一个字体文件,该文件通常是.otf格式。 Then, you need to import this font into your assets folder in your android studio or eclipse project. 然后,您需要将此字体导入到android studio或eclipse项目中的assets文件夹中。 After doing this you can create a new Typeface and set it to your text view. 完成此操作后,您可以创建一个新的字体并将其设置为文本视图。 In terms of having different fonts for the hours and minutes digit, you need to create a layout with multiple text views. 就小时和分钟数字使用不同的字体而言,您需要创建具有多个文本视图的布局。 For example, you could do something like the following 例如,您可以执行以下操作

<?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>

Another way to accomplish this, rather than setting a typeface to a textview every single time, is to create your own custom textview, so that the typeface will be applied whenever you're using it. 实现此目的的另一种方法是创建自己的自定义文本视图,而不是每次都为文本视图设置字体,以便在您每次使用字体时都将其应用。 For example, for the minutes text view, you could do: 例如,对于分钟文本视图,您可以执行以下操作:

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);
}

} }

and the, using the layout file from earlier. 和,使用之前的布局文件。

<?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>

First copy the fonts to the assets folder in your project. 首先将字体复制到项目中的assets文件夹中。

For Hour Textview 对于小时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);
}

}

For Minute Textview 对于分钟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);
}

}

For Seconds Textview 秒钟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);
}

}

and in xml file do this, 并在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