Есть ли способ увеличить / уменьшить расстояние между буквами / символами? textScaleX - Литературное масштабирование букв / символов.
Kaymatrix
2
Ответ @Barts выполняет то, что задает вопрос
bkurzius
2
Масштабирование текста по оси X - неправильный способ обработки кернинга или отслеживания в Android. Для этого существует API-интерфейс для леденца на палочке, однако до версии Lollipop для этого вам понадобится настраиваемое текстовое представление.
Elliott
2
Я не знаю, как это решение получило столько голосов (+33, -24), что люди просто слепо голосуют? letterSpacingи textScaleXкакая огромная разница
Джимит Патель
230
Начиная с API 21 существует возможность установки межбуквенного интервала. Вы можете вызвать метод setLetterSpacing или установить его в XML с атрибутом letterSpacing .
На самом деле это не работает, если установлено в XML. Я получаю такую ошибку:"1.2dp" in attribute "letterSpacing" cannot be converted to float."
dopatraman
20
@dopatraman Вы должны опускать единицы измерения, введите просто значение: android: letterSpacing = "1.2" вместо android: letterSpacing = "1.2dp"
JerabekJakub
12
Зная, что 31% устройств не поддерживают API 21, как бы вы это сделали в предыдущих версиях?
ninjaneer 02
25
Обратите внимание, что значение letterSpacing не в dp / sp, а в единицах EM. Типичные значения для небольшого расширения будут около 0,05. Отрицательные значения сужают текст.
Кристан
25
По какой-то причине letterSpacingне менялось в предварительном просмотре AS. Мне пришлось запустить приложение на физическом устройстве, чтобы увидеть изменения.
возможно, добавьте комментарий @ Evin1_ в свой ответ
Сартак Миттал
Какое максимальное и минимальное расстояние между буквами поддерживается?
Джимит Патель,
26
Этот ответ основан на ответе Педро, но настроен так, чтобы он также работал, если текстовый атрибут уже установлен:
package nl.raakict.android.spc.widget;import android.content.Context;import android.text.Spannable;import android.text.SpannableString;import android.text.style.ScaleXSpan;import android.util.AttributeSet;import android.widget.TextView;publicclassLetterSpacingTextViewextendsTextView{privatefloat letterSpacing =LetterSpacing.BIGGEST;privateCharSequence originalText ="";publicLetterSpacingTextView(Context context){super(context);}publicLetterSpacingTextView(Context context,AttributeSet attrs){super(context, attrs);
originalText =super.getText();
applyLetterSpacing();this.invalidate();}publicLetterSpacingTextView(Context context,AttributeSet attrs,int defStyle){super(context, attrs, defStyle);}publicfloat getLetterSpacing(){return letterSpacing;}publicvoid setLetterSpacing(float letterSpacing){this.letterSpacing = letterSpacing;
applyLetterSpacing();}@Overridepublicvoid setText(CharSequence text,BufferType type){
originalText = text;
applyLetterSpacing();}@OverridepublicCharSequence getText(){return originalText;}privatevoid applyLetterSpacing(){if(this==null||this.originalText ==null)return;StringBuilder builder =newStringBuilder();for(int i =0; i < originalText.length(); i++){String c =""+ originalText.charAt(i);
builder.append(c.toLowerCase());if(i+1< originalText.length()){
builder.append("\u00A0");}}SpannableString finalText =newSpannableString(builder.toString());if(builder.toString().length()>1){for(int i =1; i < builder.toString().length(); i+=2){
finalText.setSpan(newScaleXSpan((letterSpacing+1)/10), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}}super.setText(finalText,BufferType.SPANNABLE);}publicclassLetterSpacing{publicfinalstaticfloat NORMAL =0;publicfinalstaticfloat NORMALBIG =(float)0.025;publicfinalstaticfloat BIG =(float)0.05;publicfinalstaticfloat BIGGEST =(float)0.2;}}
Если вы хотите использовать его программно:
LetterSpacingTextView textView =newLetterSpacingTextView(context);
textView.setSpacing(10);//Or any float. To reset to normal, use 0 or LetterSpacingTextView.Spacing.NORMAL
textView.setText("My text");//Add the textView in a layout, for instance:((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);
\\ Большое спасибо за то, что сэкономили мое время ^ _ ^
Мухаммед Эль-Банна
0
Поскольку Android не поддерживает такую вещь, вы можете сделать это вручную с помощью FontCreator. Есть хорошие возможности для изменения шрифта. Я использовал этот инструмент для создания собственного шрифта, даже если это займет некоторое время, но вы всегда можете использовать его в своих проектах.
android:letterSpacing=".05"
Где .05 будет примерно «50» в программе, такой как PhotoshopОтветы:
проверить android: textScaleX
В зависимости от того, какой интервал вам нужен, это может помочь. Это единственное, что удаленно связано с межбуквенным интервалом в TextView.
Изменить: см. Ответ @ JerabekJakub ниже, чтобы узнать об обновленном, лучшем способе сделать это, начиная с api 21 (Lollipop)
источник
letterSpacing
иtextScaleX
какая огромная разницаНачиная с API 21 существует возможность установки межбуквенного интервала. Вы можете вызвать метод setLetterSpacing или установить его в XML с атрибутом letterSpacing .
источник
"1.2dp" in attribute "letterSpacing" cannot be converted to float."
letterSpacing
не менялось в предварительном просмотре AS. Мне пришлось запустить приложение на физическом устройстве, чтобы увидеть изменения.Больше пространства:
Меньше места:
источник
letterSpacing
0.0 согласно developer.android.com/reference/android/widget/…Этот ответ основан на ответе Педро, но настроен так, чтобы он также работал, если текстовый атрибут уже установлен:
Если вы хотите использовать его программно:
источник
null
проверкаapplyLetterSpacing
, но кроме этого, спасатель жизни!после API> = 21 существует метод inbuild, предоставляемый TextView, который называется
setLetterSpacing
проверьте это для получения дополнительной информации
источник
Я создал собственный класс, который расширяет
TextView
и решает эту проблему ... Посмотрите мой ответ здесь =)источник
Поскольку Android не поддерживает такую вещь, вы можете сделать это вручную с помощью FontCreator. Есть хорошие возможности для изменения шрифта. Я использовал этот инструмент для создания собственного шрифта, даже если это займет некоторое время, но вы всегда можете использовать его в своих проектах.
источник
Для встраивания HTML-текста в текстовое представление вы можете использовать
Html.fromHTML()
синтаксис. Дополнительную информацию вы получите по адресу http://developer.android.com/reference/android/text/Html.html#fromHtml%28java.lang.String%29.источник