Мне нужна помощь в пользовательских шрифтов и TextView - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в Android, работаю над приложением, которое дает пользователю информацию обо всех шрифтах Google.Для этого мне нужно сделать приложение с TextView Примерно так:

При нажатии на TextView шрифт изменится с текстом.

Я думаюоб использовании onclicklistener

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вы можете реализовать свой собственный шрифт с помощью TextView, EditText, Button и т. Д., Используя атрибуты Android.

Как

- Вот несколько шагов, которые нужно использовать:

1.Создать файл атрибутов (res-> values-> attrs.xml)

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <declare-styleable name="TextElement">
        <attr name="font" format="string"/>
        <attr name="underline" format="boolean"/>
    </declare-styleable>
</resources>

2.Создать пользовательский класс TextView (в любом месте в папке Java) 3. Использовать атрибуты внутриваш файл макета 4. и просто запустите ваш код.

Вот полный пример вашего вопроса, вы можете просмотреть этот пример:

Полная демонстрация

0 голосов
/ 24 сентября 2018

вы можете поместить "your_font.ttf" файл в папку активов, затем импортировать его с помощью

Typeface custom_font_1 = Typeface.createFromAsset(getAssets(),  "your_font.ttf");

, затем назначить его на showCaseTextView с этим

   showCaseTextView.setTypeFace(custom_font_1);

, затем в вашем onClickListener из showCaseTextView чтобы изменить ваш specifiedTextView шрифт, сделайте вот так

   specifiedTextView.setTypeFace(custom_font_1);

и повторите его для других шрифтов.

0 голосов
/ 24 сентября 2018

Имеется 2 способа архивировать это

1-й способ

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.

Расширение TextView Далее мы создадим новый класс Java, который расширяет TextView.Это позволяет нам использовать этот класс во всех представлениях XML.Он наследует все функциональные возможности и свойства обычного TextView;но добавляет наш собственный шрифт.

Еще раз, мы взглянем на исходный код нашего проекта «Еда гурманов».Код может показаться сложным на секунду, но он прост:

public class EatFoodyTextView extends TextView {

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

        applyCustomFont(context);
    }

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

        applyCustomFont(context);
    }

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

        applyCustomFont(context);
    }

    private void applyCustomFont(Context context) {
        Typeface customFont = FontCache.getTypeface("SourceSansPro-Regular.ttf", context);
        setTypeface(customFont);
    }
}

Первые три метода - это просто конструкторы, которые мы переопределяем для вызова одного метода applyCustomFont ().Этот метод является важной частью головоломки.Он просто получает (надеюсь, кэшированный) шрифт из нашего класса FontCache.Наконец, мы должны вызвать setTypeface () со шрифтом, и мы почти закончили.В случае, если вам интересно, мы можем вызвать setTypeface () напрямую (а не для объекта TextView), так как мы расширяем класс TextView.

Использование класса Вы можете задаться вопросом, если так много подготовкистоит усилий.В этом разделе вы увидите, что это действительно так.Потому что все, что вам осталось сделать - это использовать класс в представлении XML, и у него автоматически будет свой собственный шрифт.Нет необходимости в Java-коде!

<RelativeLayout  
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.futurestudio.foody.views.EatFoodyTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/eat_foody_green_dark"
        android:textSize="20sp"
        android:text="Future Studio Blog"
        android:layout_marginBottom="24dp"/>

</RelativeLayout>  

Как видите, вы можете продолжать использовать все тонкости (например, textSize, textColor) TextView.Теперь просто замените все элементы классом, который мы только что создали, например, и вы применили свой собственный шрифт везде!(Ссылка: https://futurestud.io/tutorials/custom-fonts-on-android-extending-textview)

2-й способ Следуйте инструкциям Google по поддержке API от 26 (Android 8) https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml

Внесите изменения в режим просмотра текста, чтобы изменить шрифт

<RelativeLayout  
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textview_normal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/eat_foody_green_dark"
        android:textSize="20sp"
        android:text="Future Studio Blog"
        android:layout_marginBottom="24dp"/>
    <com.futurestudio.foody.views.EatFoodyTextView
        android:id="@+id/textview_custom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/eat_foody_green_dark"
        android:textSize="20sp"
        android:text="Future Studio Blog"
        android:visibility="gone"
        android:layout_marginBottom="24dp"/>

</RelativeLayout> 

внимание на android:visibility="gone" в Activity, вы используете этот код для переключения между 2 TextViews

    final TextView normalTextView = findViewById(R.id.textview_normal);
    final TextView customTextView = findViewById(R.id.textview_custom);

    normalTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            normalTextView.setVisibility(View.GONE);
            customTextView.setVisibility(View.VISIBLE);
        }
    });

    customTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            normalTextView.setVisibility(View.VISIBLE);
            customTextView.setVisibility(View.GONE);
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...