自定义字体和XML布局(Android)

自定义字体和XML布局(Android)

我试图在Android中使用XML文件定义GUI布局。据我所知,没有办法指定您的小部件应该在XML文件中使用自定义字体(例如,您在资产/字体/中放置的字体),而且您只能使用已安装的系统字体。

我知道,在Java代码中,我可以使用唯一的ID手动更改每个小部件的字体。或者,我可以迭代Java中的所有小部件来进行此更改,但这可能会非常慢。

我还有别的选择吗?有什么更好的方法来制作具有自定义外观的小部件吗?我并不特别想手动更改我添加的每个新小部件的字体。


翻阅古今
浏览 813回答 3
3回答

largeQ

这可能有点晚,但您需要创建一个返回自定义字体的单例类,以避免内存泄漏。字体类:public&nbsp;class&nbsp;OpenSans&nbsp;{private&nbsp;static&nbsp;OpenSans&nbsp;instance;private&nbsp;static&nbsp;Typeface&nbsp;typeface;public&nbsp;static&nbsp;OpenSans&nbsp;getInstance(Context&nbsp;context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;synchronized&nbsp;(OpenSans.class)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(instance&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance&nbsp;=&nbsp;new&nbsp;OpenSans(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typeface&nbsp;=&nbsp;Typeface.createFromAsset(context.getResources().getAssets(),&nbsp;"open_sans.ttf"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;instance; &nbsp;&nbsp;&nbsp;&nbsp;}}public&nbsp;Typeface&nbsp;getTypeFace()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;typeface;}}自定义TextView:public&nbsp;class&nbsp;NativelyCustomTextView&nbsp;extends&nbsp;TextView&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;NativelyCustomTextView(Context&nbsp;context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(context); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTypeface(OpenSans.getInstance(context).getTypeFace()); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;NativelyCustomTextView(Context&nbsp;context,&nbsp;AttributeSet&nbsp;attrs)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(context,&nbsp;attrs); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTypeface(OpenSans.getInstance(context).getTypeFace()); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;NativelyCustomTextView(Context&nbsp;context,&nbsp;AttributeSet&nbsp;attrs, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;defStyle)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(context,&nbsp;attrs,&nbsp;defStyle); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTypeface(OpenSans.getInstance(context).getTypeFace()); &nbsp;&nbsp;&nbsp;&nbsp;}}通过XML:<com.yourpackage.views.NativelyCustomTextView &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:id="@+id/natively_text_view" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width="wrap_content" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height="wrap_content" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_centerHorizontal="true" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_margin="20dp" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:text="@string/natively" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:textSize="30sp"&nbsp;/>以编程方式:TextView&nbsp;programmaticallyTextView&nbsp;=&nbsp;(TextView)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findViewById(R.id.programmatically_text_view);programmaticallyTextView.setTypeface(OpenSans.getInstance(this) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTypeFace());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android