Перейти к содержимому

Как изменить шрифт textview android studio

  • автор:

Размер шрифта TextView

Здравствуйте! Хотелось бы узнать как можно реализовать возможность изменять размер шрифта во всей программе нажатием на кнопку и как для этого использовать параметр android:textSize=»@dimen/font_size» ? (хотя выдает ошибку в этой строке)

Отслеживать
1,000 2 2 золотых знака 8 8 серебряных знаков 26 26 бронзовых знаков
задан 11 мар 2016 в 13:12
119 1 1 золотой знак 4 4 серебряных знака 6 6 бронзовых знаков

2 ответа 2

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

А Вы прописали сам размер? В dimens.xml :

25sp, соответственно, меняете на необходимое значение.

При открытии Activity смотрите какой вариант размера Вы выбрали и меняете все необходимые размеры. Затем при нажатии изменяете размер и сохраняете выбор.

Отслеживать
ответ дан 11 мар 2016 в 13:28
15.8k 1 1 золотой знак 18 18 серебряных знаков 35 35 бронзовых знаков

Ок, если я изменю 25sp скажем на 40 px то размер шрифта изменится. С этим понятно, а каким образом можно реализовать так, чтобы при нажатии на кнопку весь текст менялся к примеру на 50px или на 20px?

11 мар 2016 в 13:32

По нажатию задавать другой размер программно. .setTextSize(R.dimen.font_size1); Сохранять выбор и при открытии другой активити подставлять нужный вариант. P.S. в первом вопросе нужно было указать, что изменять будете во время работы.

11 мар 2016 в 13:43

Не совсем понял по поводу .setTextSize(R.dimen.font_size1); Если задача при нажатии на элемент списка изменять размер всего текста, то что еще нужно прописать?

Сменить шрифт в TextView

Author24 — интернет-сервис помощи студентам

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

Текст из TextView перенести в другой TextView по нажатию Button
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную.

TextView txt = new TextView(this); — ошибка
Возникла проблема с динамическим создание TextView в цыкле, хотя в другом месте создается таким же.

Не могу сменить шрифт в системе
Какое-то время назад ни с того, ни с сего сменился шрифт в системе. Дефолтный был Segoe UI обычный.

374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4

1 2 3
TextView tv = (TextView) findViewById(R.id.textView1); Typeface face = Typeface.createFromAsset(getAssets(), "yourfont.ttf"); tv.setTypeface(face);

yourfont.ttf положить в папку assets.
Регистрация: 07.05.2014
Сообщений: 18
А куда этот код прописать?!
Регистрация: 05.05.2014
Сообщений: 31

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

А куда этот код прописать?!
В MainActivity.java, в методе onCreate.
Регистрация: 07.05.2014
Сообщений: 18
Я так и сделал.
Но приложение пишет «Unfortunately, my_app has stopped» после чего закрывается (
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

Netscape У меня заработало — сменил шрифт на кнопке. но можно ли подменить шрифт для всей программы или для целого активити?

Регистрация: 07.05.2014
Сообщений: 18
А какой шрифт использовали?
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

А какой шрифт использовали?

дал глобальный поиск по всем опенсорс коллекциям у меня на компе. нашел AeroviasBrasilNF.ttf как сильно не стандартный(«кривые буквы» — легко заметить разницу). По идее можно вроде любой!

Регистрация: 07.05.2014
Сообщений: 18

Да, дело не в шрифте — это я уже выяснил.
Logcat ругается на третью строку кода — tv.setTypeface(face);
Если её закоментарить — ошибка исчезает, но и шрифт не изменяется.

Знающие люди, подскажите в чём дело.

420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

подскажите в чём дело

У меня это работает! А значит ошибка не здесь!
Возможно Вы не правильный реквизит указали здесь:
TextView tv = (TextView) findViewById(R.id.textView1);
Вместо textView1? Возможно его не получается найти.
У меня работало даже когда забыл определить Typeface face! Просто не меняло шрифт.

Регистрация: 07.05.2014
Сообщений: 18
Не получалось бы найти — Logcat ругался бы на 1-ю строчку. А он ругается на 3-ю.
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4

Tester64, красивое решение я подсмотрел здесь:
https://github.com/johnkil/Android-RobotoTextView
и теперь не парюсь насчет установки шрифта в коде.

Регистрация: 07.05.2014
Сообщений: 18

ЦитатаСообщение от Tester64 Посмотреть сообщение

У меня это работает! А значит ошибка не здесь!
У меня работало даже когда забыл определить Typeface face! Просто не меняло шрифт.

А не затруднит ли вам выслать мне ваш исходник?
Простейший, но чтобы в вашем Eclipse проверен был и работал.

420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

выслать мне ваш исходник

Я работаю в Студии. На код это не влияет, но в еклипс импортировать сложнее. Да и проект уже больше мегабайта исходников.
Лучше Вы вышлите Ваш исходник — смогу поискать ошибки через блокнот

Добавлено через 4 минуты

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

Не получалось бы найти — Logcat ругался бы на 1-ю строчку. А он ругается на 3-ю.

Не обязательно! Если не нашел, то
TextView tv = (TextView) findViewById(R.id.textView1);
tv == null. Что можно обработать как исключение. а использовать уже нельзя

Добавлено через 30 минут

ЦитатаСообщение от Netscape Посмотреть сообщение

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

У мене не запустился! грандл со своими странностями — я еще не разобрался. попробую еще раз позднее когда будет время на изучение грандле.
можете намекнуть что искать? Кода слишком много что-бы в блокноте изучать, а APK так и не получил. Даже встроенный gradlew.bat не помог.

Регистрация: 07.05.2014
Сообщений: 18

ЦитатаСообщение от Tester64 Посмотреть сообщение

Я работаю в Студии

А я работаю дома )))

ЦитатаСообщение от Tester64 Посмотреть сообщение

Лучше Вы вышлите Ваш исходник

Ничего, что можно было бы назвать громким словом «исходник» у меня нет.
Мой код состоит всего из 3-х строк, вписанных в цикл «onCreate» — и те не работают!
Вот весь цикл:

1 2 3 4 5 6 7 8 9 10 11 12 13
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.textView1); Typeface face = Typeface.createFromAsset(getAssets(), "fonts/my_font.ttf"); tv.setTypeface(face); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()) .commit(); }}

Если же изучить Logcat, можно найти запись:
Caused by: java.lang.NullPointerException at com.example.my_app.MainActivity.onCreate (MainActivity.java: 23)
А 23-я строчка — это tv.setTypeface(face);

420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

Я работаю в Студии
А я работаю дома )))

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

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

Ничего, что можно было бы назвать громким словом «исходник» у меня нет

Все равно папка с исходниками читабельнее одного кусочка в текстовике.
1) Как я уже говорил. убедитесь что textView1 правильно нашли.
Попробуйте сразу после TextView tv = (TextView) findViewById(R.id.textView1); вставить
tv.setText(«Hello!»);
если не получится — фонт не виноват
2) уберите слово fonts/! извращаться потом будете. И не уверен что подобное вообще заработает.
3) убедитесь что my_font.ttf лежит в корневой папке assets и является шрифом.

Регистрация: 07.05.2014
Сообщений: 18

ЦитатаСообщение от Tester64 Посмотреть сообщение

. убедитесь что my_font.ttf лежит в корневой папке assets и является шрифом.

Убедися. Со шрифтом всё нормально.

ЦитатаСообщение от Tester64 Посмотреть сообщение

Попробуйте сразу после TextView tv = (TextView) findViewById(R.id.textView1); вставить
tv.setText(«Hello!»);
если не получится — фонт не виноват

Не получилось (((
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

ЦитатаСообщение от kolodiazniy Посмотреть сообщение

Не получилось (((
Значит у Вас нет TextView-элемента textView1 на этом активити (в XML файле).
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4

вот так объявляется TextView:

1 2 3 4 5 6
 android:layout_width="wrap_content" android:layout_height="wrap_content" app:typeface="roboto_thin_italic" android:textSize="22sp" android:text="Thin Italic"/>

собственно установка шрифта:
app:typeface=»roboto_thin_italic»
Регистрация: 07.05.2014
Сообщений: 18

В том-то и дело, что есть (

Решил упростить задачу: прописал в onCreate всего 2 ))) строчки.

TextView myTextView = (TextView) findViewById(R.id.myText); myTextView.setText("New text in TextView");

При этом Fragment_myapp.xml выглядит как надо:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.my.My$PlaceholderFragment" >  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" android:id="@+id/myText"/> >

И что? А всё то же — ругается на вторую строчку кода:
Caused by: java.lang.NullPointerException com.example.my.My.onCreate (My.java:21)

Стоит её закоментарить — и всё ОК.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как сменить шрифт в SanctuaryRPG
Добрый день, я решил для себя русифицировать SanctuaryRPG, но там используется шрифт Terminal.

Не получается сменить шрифт в окнах
Не получается поменять шрифт в окнах-формах. Ставлю Lucida Console везде, где только можно. Шрифт.

Как сменить шрифт в консольном приложении?
вот пытался поменять шрифт так, вышло то что видите, шрифт стал гигантским, обратно не.

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

Или воспользуйтесь поиском по форуму:

Как изменить шрифт textview android studio

Для простого вывода текста на экран предназначен элемент TextView . Он просто отображает текст без возможности его редактирования. Некоторые его основные атрибуты:

  • android:text : устанавливает текст элемента
  • android:textSize : устанавливает высоту текста, в качестве единиц измерения для указания высоты используются sp
  • android:background : задает фоновый цвет элемента в виде цвета в шестнадцатиричной записи или в виде цветового ресурса
  • android:textColor : задает цвет текста
  • android:textAllCaps : при значении true делает все символы в тексте заглавными
  • android:textDirection : устанавливает направление текста. По умолчанию используется направление слева направо, но с помощью значения rtl можно установить направление справо налево
  • android:textAlignment : задает выравнивание текста. Может принимать следующие значения:
    • center : выравнивание по центру
    • textStart : по левому краю
    • textEnd : по правому краю
    • viewStart : при направлении текста слева направо выравнивание по левому краю, при направлении справа налево — по правому
    • viewEnd : при направлении текста слева направо выравнивание по правому краю, при направлении справа налево — по левому
    • monospace
    • serif
    • serif-monospace
    • sans-serif
    • sans-serif-condensed
    • sans-serif-smallcaps
    • sans-serif-light
    • casual
    • cursive
    • cursive

    Например, определим три текстовых поля:

    Атрибуты TextView в Android Studio

    Установка элемента в коде тоже не отличается сложностью. Например, создадим элемент и выведем его на экран:

    package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.graphics.Typeface; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); ConstraintLayout constraintLayout = new ConstraintLayout(this); TextView textView = new TextView(this); // установка фонового цвета textView.setBackgroundColor(0xffe8eaf6); // установка цвета текста textView.setTextColor(0xff5c6bc0); // делаем все буквы заглавными textView.setAllCaps(true); // устанавливаем вравнивание текста по центру textView.setTextAlignment(TextView.TEXT_ALIGNMENT_CENTER); // устанавливаем текста textView.setText("Hello Android!"); // установка шрифта textView.setTypeface(Typeface.create("casual", Typeface.NORMAL)); // устанавливаем высоту текста textView.setTextSize(26); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; textView.setLayoutParams(layoutParams); constraintLayout.addView(textView); setContentView(constraintLayout); >>

    Создание TextView в Java в Android Studio

    Иногда необходимо вывести на экран какую-нибудь ссылку, либо телефон, по нажатию на которые производилось бы определенное действие. Для этого в TextView определен атрибут android:autoLink :

    autolink in Android

    android:autoLink может принимать несколько значений:

    • none : отключает все ссылки
    • web : включает все веб-ссылки
    • email : включает ссылки на электронные адреса
    • phone : включает ссылки на номера телефонов
    • map : включает ссылки на карту
    • all : включает все вышеперечисленные ссылки

    То есть при настройке android:autoLink=»web» если в тексте есть упоминание адреса url, то этот адрес будет выделяться, а при нажатии на него будет осуществлен переход к веб-браузеру, который откроет страницу по этому адресу. С помощью прямой черты мы можем объединять условия, как в данном случае: android:autoLink=»web|email»

    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 и вставьте текст.

    Стили

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

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

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