gpt4 book ai didi

android - 向所有 LinearLayout TextView 添加自定义字体

转载 作者:行者123 更新时间:2023-11-29 15:22:56 26 4
gpt4 key购买 nike

我以编程方式添加线性布局和多个 TextView ,并为文本设置自定义字体,

我是按照下面的方式做的,效果很好。

主要 Activity 1:

 public class MainActivity extends Activity {

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

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);

TextView tv = new TextView(this);
tv.setGravity(Gravity.RIGHT);
tv.setTextColor(Color.GREEN);
tv.setTextSize(40);
ll.addView(tv);
Typeface face4=Typeface.createFromAsset(getAssets(),"BFantezy.ttf");
tv.setTypeface(face4);
tv.setText(Html.fromHtml(getString(R.string.trip)));

ImageView divider = new ImageView(this);
LinearLayout.LayoutParams lp =
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
lp.setMargins(10, 10, 10, 10);
divider.setLayoutParams(lp);
divider.setBackgroundColor(Color.BLUE);
ll.addView(divider);

TextView tv1 = new TextView(this);
tv1.setGravity(Gravity.RIGHT);
tv1.setTextSize(40);
ll.addView(tv1);
Typeface face1=Typeface.createFromAsset(getAssets(),"BFantezy.ttf");
tv1.setTypeface(face1);
tv1.setText(Html.fromHtml(getString(R.string.trip1)));

ImageView divider1 = new ImageView(this);
LinearLayout.LayoutParams lp1 =
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
lp1.setMargins(10, 10, 10, 10);
divider1.setLayoutParams(lp1);
divider1.setBackgroundColor(Color.BLUE);
ll.addView(divider1);

TextView tv2 = new TextView(this);
tv2.setGravity(Gravity.RIGHT);
tv2.setTextSize(40);
ll.addView(tv2);
Typeface face2=Typeface.createFromAsset(getAssets(),"BFantezy.ttf");
tv2.setTypeface(face2);
tv2.setText(Html.fromHtml(getString(R.string.trip2)));

ImageView divider3 = new ImageView(this);
LinearLayout.LayoutParams lp3 =
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
lp3.setMargins(10, 10, 10, 10);
divider3.setLayoutParams(lp3);
divider3.setBackgroundColor(Color.BLUE);
ll.addView(divider3);
}
}

但作为记忆

Typeface.createFromAsset(getAssets()

对于每个文本,这是一种应用自定义字体的繁重方式,我尝试制作如下自定义 View ,但它没有将自定义字体设置为文本:

主要 Activity :

  public class MainActivity extends Activity {

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

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);

// add text view
TextView tv = new TextView(this);
tv.setGravity(Gravity.RIGHT);
tv.setTextColor(Color.GREEN);
tv.setTextSize(40);
ll.addView(tv);
tv.setText(Html.fromHtml(getString(R.string.trip)));

ImageView divider = new ImageView(this);
LinearLayout.LayoutParams lp =
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
lp.setMargins(10, 10, 10, 10);
divider.setLayoutParams(lp);
divider.setBackgroundColor(Color.BLUE);
ll.addView(divider);


TextView tv1 = new TextView(this);
tv1.setGravity(Gravity.RIGHT);
tv1.setTextSize(40);
ll.addView(tv1);
tv1.setText(Html.fromHtml(getString(R.string.trip1)));

ImageView divider1 = new ImageView(this);
LinearLayout.LayoutParams lp1 =
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
lp1.setMargins(10, 10, 10, 10);
divider1.setLayoutParams(lp1);
divider1.setBackgroundColor(Color.BLUE);
ll.addView(divider1);


TextView tv2 = new TextView(this);
tv2.setGravity(Gravity.RIGHT);
tv2.setTextSize(40);
ll.addView(tv2);
tv2.setText(Html.fromHtml(getString(R.string.trip2)));

ImageView divider3 = new ImageView(this);
LinearLayout.LayoutParams lp3 =
new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
lp3.setMargins(10, 10, 10, 10);
divider3.setLayoutParams(lp3);
divider3.setBackgroundColor(Color.BLUE);
ll.addView(divider3);
}}

自定义 TextView :

    public class CustomTextView extends TextView {

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

public CustomTextView(Context context, AttributeSet attrs) {
//call the constructor which has the complete definition
this(context, attrs, 0);
init();
}

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

private void init() {

Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "BFantezy.ttf");
setTypeface(tf);
}
}

任何帮助将不胜感激,谢谢。

最佳答案

与其每次都从资源中创建字体,不如创建一个“FontFactory”并重复使用同一个字体。

public class FontFactory {

private static Typeface t1;

public static Typeface getBFantezy(Context c) {
if (t1 == null) {
t1 = Typeface.createFromAsset(c.getAssets(), "BFantezy.ttf");
}
return t1;
}


private static Typeface t2;

public static Typeface getOtherFont(Context c) {
if (t2 == null) {
t2 = Typeface.createFromAsset(c.getAssets(), "OtherFont.ttf");
}
return t2;
}
}

然后要在您的代码中使用它,您只需:

tv1.setTypeface(FontFactory.getBFantezy(getContext());

您不再需要为创建字体而烦恼。如果需要它,工厂将创建它。您可以添加类似的方法来处理您希望使用的任何其他字体。

关于android - 向所有 LinearLayout TextView 添加自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com