Как изменить семейство шрифтов Spinner? - PullRequest
0 голосов
/ 21 марта 2019

Я использую Android Studio для создания приложения Android.У меня версия API выше 16, и я использую библиотеку поддержки 26. Я создал семейство шрифтов ниже res-> font, которое я назвал "cairo_regular.ttf".В моем приложении для Android в одном из моих интерфейсов я использую Spinner с выпадающим стилем для отображения списка всех стран, следующий код xml:

<android.support.v7.widget.AppCompatSpinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="16dp"
            android:prompt="@string/spinner_title" />

Я объявил адаптер вне конструкторав классе Java, то есть:

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, countryTab);
            country.setAdapter(arrayAdapter);

Я также делаю пользовательский файл XML в папке макета следующим образом:

<android.support.v7.widget.AppCompatTextView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/text1"
    style="?android:attr/dropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:fontFamily="@font/cairo_regular"
    android:textAppearance="?android:attr/textAppearanceLargePopupMenu" />

Я добавляю в пользовательский файл XML "android: fontFamily ="@ font / cairo_regular" ", чтобы изменить шрифт списка стран в счетчике, но шрифт не меняется.Я хочу знать, как я могу изменить fontfamilly Spinner в моем приложении.

1 Ответ

0 голосов
/ 21 марта 2019

Вот как я это делаю:

Класс FontCache:

import android.content.Context;
import android.graphics.Typeface;
import java.util.HashMap;


public class FontCache {

private static HashMap<String, Typeface> fontCache = new HashMap<>();

public static Typeface getTypeface(String fontname, Context context) {
    Typeface typeface = fontCache.get(fontname);

    if (typeface == null) {
        try {
            typeface = Typeface.createFromAsset(context.getAssets(), fontname);
        } catch (Exception e) {
            return null;
        }

        fontCache.put(fontname, typeface);
    }

    return typeface;
}
}

Затем создайте пользовательский класс, расширяющий TextView:

public class MontserratRegularTextView extends android.support.v7.widget.AppCompatTextView {

public MontserratRegularTextView(Context context) {
    super(context);

    applyCustomFont(context);
}

public MontserratRegularTextView(Context context, AttributeSet attrs) {
    super(context, attrs);

    applyCustomFont(context);
}

public MontserratRegularTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    applyCustomFont(context);
}

private void applyCustomFont(Context context) {
    Typeface customFont = FontCache.getTypeface("fonts/Montserrat-Regular.otf", context);//your font path here
    setTypeface(customFont);
}
}

Затем добавьте его в свой пользовательский XML-файл, который вы делаете следующим образом:

<com.example.myapplication.customFonts.MontserratRegularTextView
    android:id="@+id/user_email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing"
    android:text="@string/nav_header_title"
     />

Надеюсь, это поможет вам!

...