我想在Android应用程序中使用自定义字体。我使用以下方法将自定义字体设置为Activity
或Fragment
的所有TextView:
public static void setTypeFace(Typeface typeFace, ViewGroup parent){
for (int i = 0; i < parent.getChildCount(); i++) {
View v = parent.getChildAt(i);
if (v instanceof ViewGroup) {
setTypeFace(typeFace, (ViewGroup) v);
} else if (v instanceof TextView) {
TextView tv = (TextView) v;
tv.setPaintFlags(tv.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
tv.setTypeface(typeFace);
}
}
}
的活动:
public class MyActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
ViewGroup vg = (ViewGroup)getWindow().getDecorView();
ViewUtil.setTypeFace(tf, vg);
...
}
效果很好。但不幸的是,ActionBar的字体也发生了变化。我不想那个..
如何调整此方法以排除ActionBar的TextBox?
谢谢!
答案 0 :(得分:0)
解决方案是确定两个ActionBar TextBox的ID名称:android:id/action_bar_title
和android:id/action_bar_subtitle
。您可以使用hierarchyviewer SDK工具(感谢@pskink!)。
public static void setTypeFace(Typeface typeFace, ViewGroup parent){
for (int i = 0; i < parent.getChildCount(); i++) {
View v = parent.getChildAt(i);
if (v instanceof ViewGroup) {
setTypeFace(typeFace, (ViewGroup) v);
} else if (v instanceof TextView) {
TextView tv = (TextView) v;
String tvIdName = tv.getResources().getResourceName(tv.getId());
if (!tvIdName.equals("android:id/action_bar_title") && !tvIdName.equals("android:id/action_bar_subtitle")) {
if (DO_SUBPIXEL_RENDERING){
tv.setPaintFlags(tv.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
tv.setTypeface(typeFace);
}
}
}
}
答案 1 :(得分:0)
您可以通过覆盖TextView来创建自己的TextView:
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setType(context);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setType(context);
}
public MyTextView(Context context) {
super(context);
setType(context);
}
private void setType(Context context){
this.setTypeface(Typeface.createFromAsset(context.getAssets(),
"foo.ttf"));
this.setShadowLayer(1.5f, 5, 5, getContext().getResources().getColor(R.color.black_shadow));
}
}
并像这样使用它:
<com.your.project.package.MyTextView
android:id="@+id/oppinfo_mtv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="Player 1"
/>