Как увеличить шрифт в андроид студио
Перейти к содержимому

Как увеличить шрифт в андроид студио

  • автор:

TextView

Компонент TextView предназначен для отображения текста без возможности редактирования его пользователем, что видно из его названия (Text — текст, view — просмотр).

Находится в разделе Texts.

TextView — один из самых используемых компонентов. С его помощью пользователю удобнее ориентироваться в программе. По сути, это как таблички: Руками не трогать, По газону не ходить, Вход с собаками воспрещен, Часы работы с 9.00 до 18.00 и т.д., и служит для представления пользователю описательного текста.

Для отображения текста в TextView в файле разметки используется атрибут android:text, например:

 android:text="Погладь кота, . " 

Такой подход является нежелательным. Рекомендуется всегда использовать текстовые ресурсы. В будущем эта привычка позволит вам обеспечить многоязыковую поддержку:

 android:text="@string/hello" 

Программная установка текста

Программно текст можно задать методом setText():

 // Инициализируем компонент TextView textView = findViewById(R.id.textView); // задаём текст textView.setText("Hello Kitty!"); // или с использованием текстовых ресурсов textView.setText(R.string.hello); 

Атрибуты

android:textsize размер текста. При установке размера текста используется несколько единиц измерения: px (пиксели), dp, sp, in (дюймы), pt, mm. Для текстов рекомендуется использовать sp: android:textSize=»48sp», аналог — метод setTextSize() android:textstyle стиль текста. Используются константы: normal, bold, italic. Например, android:textStyle=»bold» выводит текст жирным android:textcolor цвет текста. Используются четыре формата в шестнадцатеричной кодировке: #RGB; #ARGB; #RRGGBB; #AARRGGBB, где R, G, B — соответствующий цвет, А — прозрачность (alpha-канал). Значение А, установленное в 0, означает прозрачность 100%.

Для всех вышеперечисленных атрибутов в классе TextView есть соответствующие методы для чтения или задания соответствующих свойств.

Программно установим размеры текста при помощи setTextSize() с различными единицами измерения.

 // 20 DIP (Device Independent Pixels) textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); // 0.5 inch textView.setTextSize(TypedValue.COMPLEX_UNIT_IN, 0.5f); // 10 millimeter textView.setTextSize(TypedValue.COMPLEX_UNIT_MM, 10); // 30 points textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 30); // 30 raw pixels textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30); // 30 scaled pixels textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30); 

TextView

По умолчанию у компонентов TextView отсутствует фоновый цвет. Чтобы задать цвет, укажите значение Drawable для атрибута android:background. В качестве значения Drawable может использоваться изображение или XML-представление фигуры, включающий ресурс Drawable (поместить в папку res/drawable).

Программная установка фона

В некоторых случаях программисты из-за невнимательности неправильно меняют фон элемента программным способом и удивляются, почему ничего не работает.

Предположим, у вас определён в ресурсах зелёный цвет:

 #337700 

Следующий код будет ошибочным:

 textview.setBackgroundColor(R.color.tvBackground); // не работает 

Нужно так (два варианта):

 textView.setBackgroundResource(R.color.tvBackground); // первый вариант textView.setBackgroundColor(getResources().getColor(R.color.tvBackground)); // второй вариант 

Реагируем на событие onClick

Если вы хотите, чтобы TextView обрабатывал нажатия (атрибут android:onClick), то не забывайте также использовать в связке атрибут android:clickable=»true». Иначе работать не будет!

Многострочный текст

Если вы хотите создать многострочный текст в TextView, то используйте символы \n для переноса строк.

Например, в ресурсах:

  У лукоморья дуб зелёный;\n Златая цепь на дубе том:\n И днём и ночью кот учёный\n Всё ходит по цепи кругом;\n Идёт направо - песнь заводит,\n Налево - сказку говорит. 

Обратите внимание, что в тексте также применяется простое форматирование.

Также перенос на новую строку можно задать в коде:

 textView.setText("Первая строка \nВторая строка \nТретья строка"); 

Увеличиваем интервалы между строками

Вы можете управлять интервалом между соседними строчками текста через атрибут android:lineSpacingMultiplier, который является множителем. Установите дробное значение меньше единицы, чтобы сократить интервал или больше единицы, чтобы увеличить интервал между строками.

 android:lineSpacingMultiplier="0.8" 

Бой с тенью

Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor, shadowDx, shadowDy и shadowRadius. С их помощью вы можете установить цвет тени и ее смещение. Во время установки значений вы не увидите изменений, необходимо запустить пример в эмуляторе или на устройстве. В следующем примере я создал тень красного цвета со смещением в 2 пикселя по вертикали и горизонтали. Учтите, что для смещения используются единицы px (пиксели), единицы dp не поддерживаются.

TextView с тенью

Программный эквивалент — метод public void setShadowLayer (float radius, float dx, float dy, int color):

 TextView textShadow = (TextView)findViewById(R.id.hello); textShadow.setShadowLayer( 5f, //float radius 10f, //float dx 10f, //float dy 0xFFFFFFFF //int color ); 

Создание ссылок автоматом

У TextView есть ещё два интересных свойства Auto link (атрибут autoLink) и Links clickable (атрибут linksClickable), которые позволяют автоматически создавать ссылки из текста.

Выглядит это следующим образом. Предположим, мы присвоим элементу TextView текст Мой сайт: developer.alexanderklimov.ru и применим к нему указанные свойства.

При этом уже на этапе разработки вы увидите, что строка адреса сайта после слов Мой адрес: стала ссылкой. Если вы запустите приложение и нажмете на ссылку, то откроется браузер с указанным адресом. Вам даже не придется писать дополнительный код. Аналогично, если указать номер телефона (параметр phone), то запустится звонилка.

У ссылки есть интересная особенность — при длительном нажатии на ссылку появляется диалоговое окно, позволяющее скопировать ссылку в буфер обмена.

Атрибут autoLink позволяет комбинировать различные виды ссылок для автоматического распознавания: веб-адрес, email, номер телефона.

Ссылка в TextView

Цвет ссылки можно поменять через свойство Text color link (XML-атрибут textColorLink), а программно через метод setTextLinkColor().

Программно можно установить ссылки на текст через класс Linkify:

 TextView tvDisplay = (TextView)findViewById(R.id.tvDisplay); String data = "" + "Пример использования Linkify для создания ссылок в тексте.\n" + "\n" + "URL: http://developer.alexanderklimov.ru/ \n" + "Email: [email protected] \n" + "Телефон: (495)-458-58-29 \n" + "Адрес: 10110 ул.Котовского, г.Мышкин \n" + "\n" + "Классно получилось?"; if(tvDisplay != null)

Ссылка в TextView

Кроме константы ALL, можно также использовать Linkify.EMAIL_ADDRESSES, Linkify.MAP_ADDRESSES, Linkify.PHONE_NUMBERS. К сожалению, русские адреса не распознаются. В моём случае индекс был распознан как телефонный номер, а город и улица не стали ссылкой.

В таких случаях придётся самостоятельно добавить ссылки в текстах. Например, определим ссылку в ресурсе:

Присвоим созданный ресурс тексту в TextView и запустим пример. Сам текст будет выглядеть как ссылка, но реагировать не будет. Чтобы исправить данную проблему, добавим код:

 TextView textView = (TextView) findViewById(R.id.textView); textView.setMovementMethod(LinkMovementMethod.getInstance()); 

Ссылки в тексте выглядят не совсем удобными. Есть отдельная библиотека, которая улучшает функциональность. Описание проблем и ссылка на библиотеку есть в статье A better way to handle links in TextView — Saket Narayan.

Совет: Используйте полупрозрачность с умом

Если вам нужно установить текст полупрозрачным, то не используйте атрибут android:alpha:

Дело в том, что такой подход затрачивает много ресурсов при перерисовке.

Атрибут textColor позволяет установить полупрозрачность без потери производительности:

Выделить текст для копирования

По умолчанию, текст в TextView нельзя выделить для копирования. Но в API 11 появилась такая возможность, которая может пригодиться. Делается либо при помощи XML-атрибута android:textIsSelectable, либо через метод setTextIsSelectable().

Добавьте в разметку два компонента TextView и одно текстовое поле EditText для вставки скопированного текста. У первой текстовой метки установим возможность выделения текста декларативно.

Для второго компонента возможность выделения создадим программно.

 TextView secondTextView = (TextView) findViewById(R.id.textView2); secondTextView.setTextIsSelectable(true); 

Сделайте долгий тап на тексте в любом TextView. Увидите стандартные ползунки для выбора длины текста. Скопируйте текст, сделайте длинный тап в EditText и вставьте текст.

Стили

Выводим разделитель под текстом.

Динамическое изменение размера шрифта во всем приложении на Android с помощью Configuration.fontScale

Захотелось мне немного поделиться своими мыслями по поводу android разработки. Возникла у меня задача сделать настройку размера шрифта в приложении, чтобы каждый пользователь сам мог подобрать под себя размер.

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

Когда писал данную статью, суть заключалась в следующем: в настройках приложения хранится коэффициент увеличения шрифта. Этот коэффициент применяется на реальный размер шрифта в собственном классе, наследованным от TextView. Но Ganster41 подсказал более хорошее решение. Поэтому сперва будет описание первоначального решение, а в конце будет реализация с помощью Configuration.fontScale.

Первоначальная реализация

Начнем с того, что в нужном месте приложения добавим функционал выбора и сохранения коэффициента:

float new_coef = 1.3f; //активируем параметры SharedPreferences settings = getSharedPreferences("MyAppSett", MODE_PRIVATE); Editor value_add = settings.edit(); //заносим новый коэффициент увеличения шрифта value_add.putFloat("size_coef", new_coef); value_add.commit(); 

Естественно new_coef нужно заполнять динамически. Например при выборе значения на бегунке.

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

package com.Example.Test; import android.app.Application; import android.content.SharedPreferences; public final class MyApp extends Application < private float size_coef; //коэффициент увеличения шрифта //получить коэффициент размера шрифта public float getSizeCoef() < return size_coef; >//инициализация приложения @Override public void onCreate() < super.onCreate(); //считываем коэффициент увеличения шрифта SharedPreferences settings = getSharedPreferences("MyAppSett", MODE_PRIVATE); size_coef= settings.getFloat("size_coef", 1f); >> 

Далее в файле манифеста укажем новый наш класс:

После этого необходимо создать еще один класс, но уже на основе TextView:

package com.Example.Test; import android.app.Activity; import android.content.Context; import android.support.v7.widget.AppCompatTextView; import android.util.AttributeSet; import android.util.TypedValue; //класс приложения с глобальной переменной public final class MyTextView extends AppCompatTextView < //инициализация касса public MyTextView(Context context, AttributeSet attrs) < super(context, attrs); InitSize(context); >//установка нужного размера private void InitSize(Context context) < //получаем коэффициент увеличения шрифта Activity activity = (Activity) context; float koef = ((MyApp) activity.getApplication()).getSizeCoef(); float cur_size = getTextSize(); //текущий размер шрифта в пикселях //устанавливаем новый размер шрифта в пикселях setTextSize(TypedValue.COMPLEX_UNIT_PX, cur_size * koef); >> 

Обратите внимание на то, что у метода setTextSize первый параметр по умолчанию = TypedValue.COMPLEX_UNIT_SP. Что означает установку размера шрифта в sp единицах измерения. В нашем же случае используется TypedValue.COMPLEX_UNIT_PX. Этот тип необходимо указывать, чтобы задать размер шрифта в пикселях, т.к. getTextSize возвращает текущий размер в пикселях.

В принципе все подготовительные классы готовы. Осталось в нужном месте разметки вместо TextView указать свой собственный класс MyTextView:

В итоге при открытии activity у данного текста будет изменен размер шрифта на тот, что выбрал пользователь. С EditText все делается аналогично.

Обновленная реализация

Для себя я решил использовать коэффициент размера шрифта от 0.7f до 1.45f с интервалом 0.15f. Т.е. это 6 шагов. Для выбора конкретного значения использую SeekBar.

В нужном месте приложения (в методе onCreate) реализуем обработку выбранного значения на SeekBar:

final float start_value = 0.7f; //начальное значение размера шрифта final float step = 0.15f; //шаг увеличения коэффициента int size_coef; //выбранный коэффициент . SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar); . if (seekBar != null) < seekBar.setProgress(select_coef); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() < @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) < size_coef = progress; //выбранный коэффициент >@Override public void onStartTrackingTouch(SeekBar seekBar) < >@Override public void onStopTrackingTouch(SeekBar seekBar) < >>); > 

Обработку выбора значения на бегунке сделали. Теперь необходимо сохранить выбранный результат и сразу же изменить размер шрифта (например по кнопке применять):

//активируем параметры SharedPreferences settings = getSharedPreferences("MyAppSett", MODE_PRIVATE); SharedPreferences.Editor value_add = settings.edit(); //заносим новый коэффициент увеличения шрифта value_add.putInt("size_coef", size_coef); value_add.apply(); //устанавливаем размер шрифта в приложении Resources res = getResources(); float сoef = start_value + size_coef * step; //новый коэффициент увеличения шрифта Configuration configuration = new Configuration(res.getConfiguration()); configuration.fontScale = сoef; res.updateConfiguration(configuration, res.getDisplayMetrics()); 

Теперь при смене activity будет новый размер шрифта во всех местах приложения. Но на данный момент этот размер будет только до перезагрузки приложения. При открытии приложения произойдет установка размера шрифта того, что установлен в настройках android на устройстве. И соответственно, чтобы в приложении был нужным нам размер, необходимо его переназначить. Для этого мы и сохраняем коэффициент в параметры приложения:

package com.Example.Test; import android.app.Application; import android.content.SharedPreferences; public final class MyApp extends Application < //инициализация приложения @Override public void onCreate() < super.onCreate(); int size_coef; final float start_value = 0.7f; //начальное значение размера шрифта final float step = 0.15f; //шаг увеличения коэффициента Resources res = getResources(); SharedPreferences settings = getSharedPreferences("MyAppSett", MODE_PRIVATE); try < //считываем коэффициент размера шрифта size_coef = settings.getInt("size_coef", 2); >catch (Exception e) < size_coef = 2; //коэффициент по умолчанию >//новый коэффициент увеличения шрифта float new_value = start_value + size_coef * step; //устанавливаем размер шрифта в приложении Configuration configuration = new Configuration(res.getConfiguration()); configuration.fontScale = new_value; res.updateConfiguration(configuration, res.getDisplayMetrics()); > > 

По умолчанию используется значение 2, т.е. в моей формуле это коэффициент увеличения шрифта равный 1 (0,7 + 0,15 * 2 = 1). Данный класс необходимо прописать в манифесте:

В итоге при открытии приложения будет изменен размер шрифта во всех местах. Свою реализацию переделал с первого способа на второй, что позволило не добавлять собственные классы для TextView, EditText и т.п.

Всем спасибо за внимание.

  • android
  • шрифт
  • Configuration.fontScale

Как уменьшить размер шрифта в Android Studio

Можно ли уменьшить размер шрифта в Android Studio? Больно уж неудобно ползать по классам, когда они по 300+ строк кода, а на экран вмещается всего лишь 50 !

Отслеживать
8,331 4 4 золотых знака 26 26 серебряных знаков 48 48 бронзовых знаков
задан 23 ноя 2015 в 14:57
user189127 user189127

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

можно. это в File > Settings

  1. Editor > General > Change font size (Zoom) with Ctrl + Mouse Wheel — галочку нужно поставить
  2. Editor > Color & Fonts > Font > Size : 14

введите сюда описание изображения

Отслеживать
ответ дан 23 ноя 2015 в 15:02
8,331 4 4 золотых знака 26 26 серебряных знаков 48 48 бронзовых знаков
Спасибо, через 7 минут приму ответ. Сайт ругается.
– user189127
23 ноя 2015 в 15:05

Стоит заметить, что для дефолтных тем нельзя изменить размер шрифта в настройках. Предварительно нужно создать собственную тему — копию дефолтной, нажав на кнопку Save As .. и уже в ней менять шрифт и все, что угодно.

23 ноя 2015 в 15:09
@pavlofff согласень ! Тут на рисунке это указано. Спасибо
23 ноя 2015 в 15:11

Да, заработало! Только установленный по умолчанию шрифт вручную всё равно не меняется, зато теперь таки заработал Ctrl+мышка и решила мою проблему. Не понятно, зачем сделали это разрешение на изменение шрифта, будто в AS проблем нет. Издевательство над организмом.

Как в Android Studio изменить шрифт стандартной темы на кастомный?

В самой дефолтной теме приложение которая автоматически применяется в Android Studio для каждого нового проекта сверху,под статус баром,отображается панелька синего цвета с названием приложения.Каким образом можно отредактировать шрифт на этой панельке?

  • Вопрос задан более трёх лет назад
  • 4797 просмотров

Комментировать
Решения вопроса 1

abler98

Software Engineer

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

public class Typeface < . /** The default NORMAL typeface object */ public static final Typeface DEFAULT; /** * The default BOLD typeface object. Note: this may be not actually be * bold, depending on what fonts are installed. Call getStyle() to know * for sure. */ public static final Typeface DEFAULT_BOLD; /** The NORMAL style of the default sans serif typeface. */ public static final Typeface SANS_SERIF; /** The NORMAL style of the default serif typeface. */ public static final Typeface SERIF; /** The NORMAL style of the default monospace typeface. */ public static final Typeface MONOSPACE; . >

Можно ещё сделать примерно так:

Потом в коде установить шрифт:

Typeface typeface = Typeface.createFromAsset(context.getAssets(), fontAssetName); TextView toolbarTitle = (TextView) findViewById(R.id.toolbar_title); toolbarTitle.setTypeface(typeface);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *