如何制作一个自定义的TextView?

我试图做一个自定义的文本视图,从给定的path设置字体。 请给我提供任何示例,以及如何使用较less的代码:

<TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/accountInfoText" android:textColor="#727272" android:textSize="18dp" /> 

Solutions Collecting From Web of "如何制作一个自定义的TextView?"

 import android.content.Context; import android.graphics.Canvas; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; public class FontTextView extends TextView {  public FontTextView(Context context) {   super(context);   Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf");   this.setTypeface(face);  }  public FontTextView(Context context, AttributeSet attrs) {    super(context, attrs);  Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf"); this.setTypeface(face);  }  public FontTextView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);  Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf"); this.setTypeface(face);  }  protected void onDraw (Canvas canvas) {    super.onDraw(canvas);       } } 

并在xml中:

 <com.util.FontTextView          android:id="@+id/textView2"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="@string/accountInfoText"          android:textColor="#727272"          android:textSize="18dp" /> 

Textview创build一个自定义视图。 步骤1 – 在attrs.xml文件中input条目,并给出一个选项,以在自定义TextViewselectFont作为列表。

 <declare-styleable name="CustomFontTextView"> <attr name="fontName"/> </declare-styleable> 

第2步:创build带有字体列表的枚举条目并分配唯一值

 <attr name="fontName" format="enum"> <enum name="Roboto_Bold" value="1" /> <enum name="Roboto_Italic" value="2" /> <enum name="Roboto_Light" value="3" /> <enum name="Roboto_Medium" value="4" /> <enum name="Roboto_Regular" value="5" /> <enum name="Roboto_Thin" value="6" /> </attr> 

第3步:在strings.xmlinput所有字体

 <string name="Roboto_Bold">Roboto-Bold</string> <string name="Roboto_Medium">Roboto-Medium</string> <string name="Roboto_Light">Roboto-Light</string> <string name="Roboto_Regular">Roboto-Regular</string> <string name="Roboto_Thin">Roboto-Thin</string> <string name="Roboto_Italic">Roboto-Italic</string> 

第4步:创build资产文件夹,并将所有需要的字体复制到字体文件夹中

第5步:创build一个扩展TextView

  import android.content.Context; import android.content.res.TypedArray; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; /** * Created by ANKIT */ public class CustomFontTextView extends TextView { String customFont; public CustomFontTextView(Context context, AttributeSet attrs) { super(context, attrs); style(context, attrs); } public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); style(context, attrs); } private void style(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontTextView); int cf = a.getInteger(R.styleable.CustomFontTextView_fontName, 0); int fontName = 0; switch (cf) { case 1: fontName = R.string.Roboto_Bold; break; case 2: fontName = R.string.Roboto_Italic; break; case 3: fontName = R.string.Roboto_Light; break; case 4: fontName = R.string.Roboto_Medium; break; case 5: fontName = R.string.Roboto_Regular; break; case 6: fontName = R.string.Roboto_Thin; break; default: fontName = R.string.Roboto_Regular; break; } customFont = getResources().getString(fontName); Typeface tf = Typeface.createFromAsset(context.getAssets(), "font/" + customFont + ".ttf"); setTypeface(tf); a.recycle(); } } 

你可以这样使用这个自定义类。 ..使用你的packageName.ClassName

  <ankit.com.customui.CustomFontTextView android:layout_width="match_parent" android:text="Hello World Ankit" android:textSize="16sp" app:fontName="Roboto_Medium" android:layout_height="wrap_content"/> 

下面的自定义类可以帮助您自定义在TextView上设置所需的字体,所以您必须将一些.ttf文件放在资源中,并在自定义TextView上给出此path。

 public class TextViewBoldFont extends TextView { public TextViewBoldFont(Context context, AttributeSet attrs) { super(context, attrs); String fontPath = "GOTHICB.TTF"; Typeface fontsStyle = Typeface.createFromAsset(context.getAssets(), fontPath); this.setTypeface(fontsStyle,Typeface.BOLD); } public TextViewBoldFont(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); String fontPath = "GOTHICB.TTF"; Typeface fontsStyle = Typeface.createFromAsset(context.getAssets(), fontPath); this.setTypeface(fontsStyle,Typeface.BOLD); } public TextViewBoldFont(Context context) { super(context); String fontPath = "GOTHICB.TTF"; Typeface fontsStyle = Typeface.createFromAsset(context.getAssets(), fontPath); this.setTypeface(fontsStyle,Typeface.BOLD); } }