установить шрифт во время выполнения, Textview - PullRequest
38 голосов
/ 14 августа 2010

Как установить шрифт для textview, который создается во время выполнения?

я создал текстовое представление

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

как я могу изменить размер
я хочу установить стиль шрифта "Verdana".

Как это сделать ?? С уважением Шишир

Ответы [ 7 ]

66 голосов
/ 14 августа 2010

Чтобы установить встроенный шрифт во время выполнения:

  • Прежде всего, для изменения шрифта используется класс Гарнитура .

  • Теперь, at Run-Time, чтобы установить начертание шрифта, используйте setTypeface(Typeface) из кода Java

  • at Design-Time, чтобы установить начертание шрифта, используйте android:typeface="serif"

Например:

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

Для установки пользовательских шрифтов в приложении Android

Для этого просто создайте ресурс / папку в корне проекта и поместите ваши шрифты (в форме TrueType или TTF) в ресурсы. Вы можете, например, создать assets/fonts/ и поместить туда свои файлы TTF:

  TextView tv=(TextView)findViewById(R.id.custom); 
  Typeface face=Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf"); 
  tv.setTypeface(face); 
4 голосов
/ 08 апреля 2014

Вы можете иметь шрифт .ttf в своей папке активов.Скажите, что шрифт называется «default.ttf», и вам просто нужно написать ниже 2 строк кода

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

Вы также должны быть осторожны, потому что разные шрифты имеют разные размеры.Вам может потребоваться установить размер как:

text.setTextSize(20);
2 голосов
/ 22 января 2018

С введением шрифтов в XML в Android 8.0 (обратно совместимых с версией API 14) очень легко установить шрифт из самого xml.

Из документации Android:

Android 8.0 (уровень API 26) представляет новую функцию «Шрифты в XML», которая позволяет использовать шрифты в качестве ресурсов.Вы можете добавить файл шрифта в папку res / font / для объединения шрифтов в качестве ресурсов.Эти шрифты скомпилированы в вашем R-файле и автоматически доступны в Android Studio.Вы можете получить доступ к ресурсам шрифта с помощью нового типа ресурса, шрифта.Например, чтобы получить доступ к ресурсу шрифтов, используйте @ font / myfont или R.font.myfont.

Сначала создайте Каталог ресурсов Android в папке res с именем как font
Добавьте файл шрифта .ttf в этот каталог, а затем создайте семейство шрифтов

Создайте семейство шрифтов

Семейство шрифтов - это набор файлов шрифтовнаряду с его стилем и весом детали.В Android вы можете создать новое семейство шрифтов в качестве ресурса XML и обращаться к нему как к единому модулю, вместо того чтобы ссылаться на каждый стиль и вес в качестве отдельных ресурсов.Таким образом, система может выбрать правильный шрифт на основе стиля текста, который вы пытаетесь использовать.

Чтобы создать семейство шрифтов, выполните следующие действия в Android Studio:

  1. Щелкните правой кнопкой мыши папку шрифтов и выберите Создать> Файл ресурсов шрифта .Откроется окно «Новый файл ресурсов».
  2. Введите имя файла и нажмите кнопку «ОК».Новый редактор ресурсов шрифтов XML открывается в редакторе.
  3. Включите каждый атрибут файла шрифта, стиля и веса в элемент <font>.Следующий XML-код иллюстрирует добавление атрибутов, связанных со шрифтом, в 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>

Затем используйте следующий код, чтобы установить шрифт в textView

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>
2 голосов
/ 06 января 2013

Вот небольшой класс утилит

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

}

Для таких вещей, как Spinner s или ListView s (то есть любого вида AdapterView), которые генерируют своих дочерних элементов из адаптера, который вам понадобитсяустановите гарнитуру каждого элемента View в методе getView (или аналогичном) адаптера.Это связано с тем, что представления могут создаваться по мере необходимости, и поэтому установка Typeface в onCreate не будет работать должным образом.

1 голос
/ 14 августа 2010

Вам необходимо использовать Гарнитура :

  1. добавить шрифт, который вы хотите использовать в своем проекте в качестве ресурса.
  2. создать объект Typeface, используяшрифт:

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

  3. установить гарнитуру для объекта, который вы хотите настроить:

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

0 голосов
/ 26 июля 2017

Динамически вы можете установить семейство шрифтов, аналогичное android: fontFamily в xml, используя это,

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

Это список шрифта по умолчанию используемого семейства, используйте любое из них, заменив строку двойной кавычки "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" - это файл ttf. Путь будет в src / assets / fonts / mycustomfont.ttf

0 голосов
/ 22 июля 2012

Вы можете использовать следующий код, чтобы установить весь ваш текст на определенный шрифт во время выполнения. Просто вызовите метод setViewGroupFont в конце метода Activity onCreate или всякий раз, когда вы динамически создаете новые представления:

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
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...