Vraag zet het lettertype tijdens runtime, Textview


Hoe stel ik het lettertype in op textview, dat is gemaakt tijdens runtime?

ik heb tekstweergave gemaakt

Textview tv = new TextView(this);      
tv.setTextSize(20);

zoals ik de maat kan veranderen
ik wil de tekenstijl instellen op "Verdana".

Hoe doe je dit?? vriendelijke groeten Shishir


34
2017-08-14 11:45


oorsprong


antwoorden:


Om ingebouwd lettertype tijdens runtime in te stellen:

  • Allereerst: om lettertype te veranderen, a   Typeface   klasse wordt gebruikt.

  • Nu, at Run-Time, om het lettertype in te stellen, Gebruik setTypeface(Typeface) van de Java-code

  • at Design-Time, om het lettertype in te stellen, Gebruik android:typeface="serif"

Bijvoorbeeld:

<TextView android:text="@+id/TextView01"
 android:id="@+id/TextView01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textSize="30px"
 android:textStyle="italic"
 android:typeface="serif" />

Aangepast lettertype (s) instellen in uw Android-applicatie

Hiertoe maakt u eenvoudig een item / map in de projectroot en plaatst u uw lettertypen (in TrueType of TTF, vorm) in de items. U kunt bijvoorbeeld maken assets/fonts/ en zet je TTF-bestanden daar:

  TextView tv=(TextView)findViewById(R.id.custom); 
  Typeface face=Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf"); 
  tv.setTypeface(face); 

62
2017-08-14 13:35



U kunt het .ttf-lettertype in uw activamap gebruiken. Zeg de naam van het lettertype is "default.ttf" en je moet nu gewoon onder 2 regels code schrijven

TextView text = new TextView(this);
text.setTypeface(Typeface.createFromAsset(getAssets(), "default.ttf"));

Je moet ook voorzichtig zijn omdat verschillende lettertypen verschillende grootten hebben. U moet mogelijk de grootte instellen op:

text.setTextSize(20);

3
2018-04-08 00:21



Hier is een kleine utiliteitsklasse

public class TypefaceHelper {

    public static void setViewGroupTypeface(ViewGroup container, Typeface typeface) {
        final int children = container.getChildCount();

        for (int i = 0; i < children; i++) 
            View child = container.getChildAt(i);

            if (child instanceof TextView) {
                setTextViewTypeface((TextView) child, typeface);
            } else if (child instanceof ViewGroup) {
                setViewGroupTypeface((ViewGroup) child, typeface);
            }
        }
    }

    public static void setTextViewTypeface(TextView textView, Typeface typeface) {
        textView.setTypeface(typeface);
    }

}

Voor dingen zoals Spinners of ListViews (dat wil zeggen elke soort AdapterView) die hun kinderen via een adapter genereren, moet u het lettertype van elk item instellen View in de getView (of soortgelijke) methode van de adapter. Dit komt omdat er waar nodig views kunnen worden gemaakt en zo de Typeface in onCreate zal niet goed werken.


2
2018-01-06 15:37



Je moet gebruiken Typeface:

  1. voeg lettertype toe dat u als item voor uw project wilt gebruiken.
  2. letterface-object maken met dat lettertype:

    Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/MyFont.ttf");

  3. zet het lettertype op het object dat u wilt aanpassen:

    TextView myTextView = (TextView)findViewById(R.id.my_text_view); myTextView.setTypeface(myFont);


1
2017-08-14 11:56



Met introductie van Lettertypen in XML in Android 8.0 (achterwaarts compatibel met API-versie 14) is het zeer eenvoudig in te stellen lettertype van xml zelf.

Van de Android-documentatie:

Android 8.0 (API level 26) introduceert een nieuwe functie, Fonts in XML,   waarmee u lettertypen als bronnen kunt gebruiken. U kunt het lettertypebestand toevoegen   de res / font / folder om lettertypen te bundelen als resources. Deze lettertypen zijn   gecompileerd in uw R-bestand en zijn automatisch beschikbaar in Android   Studio. U kunt de fontresources openen met behulp van een nieuw   resourcetype, lettertype. Gebruik bijvoorbeeld om toegang te krijgen tot een bron voor lettertypen   @ font / myfont of R.font.myfont.

Maak eerst een Android Resource Directory in res map met de naam as doopvont
Voeg uw .ttf-lettertypebestand toe aan die map en maak vervolgens de lettertypefamilie aan

Maak een lettertypefamilie

Een lettertypefamilie is een verzameling lettertypebestanden samen met de stijl- en gewichtdetails. In Android kunt u een nieuwe lettertypefamilie als een XML-resource maken en deze als een enkele eenheid gebruiken, in plaats van elke stijl en elk gewicht te verwijzen als afzonderlijke bronnen. Door dit te doen, kan het systeem het juiste lettertype selecteren op basis van de tekststijl die u probeert te gebruiken.

Om een ​​lettertypefamilie te maken, voert u de volgende stappen uit in de Android Studio:

  1. Klik met de rechtermuisknop op de map met lettertypen en ga naar Nieuw> Fontbronbestand. De Het nieuwe Resource File-venster verschijnt.
  2. Voer de bestandsnaam in en klik vervolgens op OK. De nieuwe XML-bron voor lettertypen opent in de editor.
  3. Omsluit elk lettertype, stijl en gewichtsattribuut in de <font> element. De volgende XML illustreert het toevoegen van font-gerelateerd attributen in de font resource XML:

    <?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/lobster_regular" /> <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/lobster_italic" /> </font-family>

Gebruik vervolgens de volgende code om het lettertype in te stellen textView graag willen

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>

1
2018-01-22 11:30



Dynamisch kunt u de fontfamilie die vergelijkbaar is met android: fontFamily in xml instellen door dit te gebruiken,

For Custom font:

 TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
 Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf"); 
 tv.setTypeface(face);

For Default font:

 tv.setTypeface(Typeface.create("sans-serif-medium",Typeface.NORMAL));

Dit zijn de lijst met standaardlettertype gebruikte familie, gebruik dit door de dubbele aanhalingsteken te vervangen "Sans-serif-medium"

FONT FAMILY                    TTF FILE                    

1  casual                      ComingSoon.ttf              
2  cursive                     DancingScript-Regular.ttf   
3  monospace                   DroidSansMono.ttf           
4  sans-serif                  Roboto-Regular.ttf          
5  sans-serif-black            Roboto-Black.ttf            
6  sans-serif-condensed        RobotoCondensed-Regular.ttf 
7  sans-serif-condensed-light  RobotoCondensed-Light.ttf   
8  sans-serif-light            Roboto-Light.ttf            
9  sans-serif-medium           Roboto-Medium.ttf           
10  sans-serif-smallcaps       CarroisGothicSC-Regular.ttf 
11  sans-serif-thin            Roboto-Thin.ttf             
12  serif                      NotoSerif-Regular.ttf       
13  serif-monospace            CutiveMono.ttf              

"mycustomfont.ttf" is het ttf-bestand. Pad zal erin zijn src / assets / fonts / mycustomfont.ttf


0
2017-07-26 12:51



U kunt de volgende code gebruiken om al uw tekst tijdens runtime in te stellen op een specifiek lettertype. Bel gewoon de setViewGroupFont methode aan het einde van uw activiteit onCreate methode of wanneer u dynamisch nieuwe weergaven maakt:

private static final String FONT_NAME = "fonts/Roboto-Regular.ttf";
private static Typeface m_font = null;

public static Typeface getFont(Context p_context)
{
    if (null == m_font && null != p_context)
    {
        m_font = Typeface.createFromAsset(p_context.getApplicationContext().getAssets(), FONT_NAME);
    }
    return m_font;
}

public static void setViewGroupFont(ViewGroup p_viewGroup)
{
    if (null != p_viewGroup)
    {
        for (int currChildIndex = 0; currChildIndex < p_viewGroup.getChildCount(); currChildIndex++)
        {
            View currChildView = p_viewGroup.getChildAt(currChildIndex);

            if (ViewGroup.class.isInstance(currChildView))
            {
                setViewGroupFont((ViewGroup) currChildView);
            }
            else
            {
                try
                {
                    Method setTypefaceMethod = currChildView.getClass().getMethod("setTypeface", Typeface.class);

                    setTypefaceMethod.invoke(currChildView, getFont(p_viewGroup.getContext()));
                }
                catch (NoSuchMethodException ex)
                {
                    // Do nothing
                }
                catch (Exception ex)
                {
                    // Unexpected error setting font
                }
            }
        }
    }
}

-2
2017-07-22 08:10