it-swarm.com.de

Wie erstelle ich eine benutzerdefinierte TextView?

Ich versuche, eine benutzerdefinierte Textansicht zu erstellen, in der die Schriftart aus einem bestimmten Pfad festgelegt wurde. Bitte geben Sie mir ein Beispiel und wie ich das mit weniger Code machen kann:

<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" />
30
Sunil_Suthar
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);
        
       
    }

}

und in 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" />
92
SuN

Erstellen Sie eine benutzerdefinierte Ansicht für Textview. Schritt 1 - Machen Sie den Eintrag in der attrs.xml-Datei und geben Sie eine Option an, um die Option Schriftart als Liste in benutzerdefinierten TextView auszuwählen. 

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

Schritt 2: Erstellen Sie den Enum-Eintrag mit der Liste der Schriftarten und weisen Sie eindeutige Werte zu

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

Schritt 3: Machen Sie Eingaben aller Schriftarten in strings.xml

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

Schritt 4: Erstellen Sie den Asset-Ordner und kopieren Sie alle erforderlichen Schriftarten, die Sie in den Schriftartenordner legen möchten

Schritt 5: Erstellen Sie eine Klasse, die TextView erweitert.

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

Sie können diese benutzerdefinierte Klasse auf diese Weise verwenden. .. verwenden Sie Ihren 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"/>
29
bond007