Android: TextView: удаление интервала и отступов сверху и снизу

Когда у меня есть TextView с \n в тексте, справа у меня есть два singleLine TextView s, один под другим без промежутка между ними. Я установил следующее для всех трех TextView .

  android:lineSpacingMultiplier="1" android:lineSpacingExtra="0pt" android:paddingTop="0pt" android:paddingBottom="0pt" 

Первая строка левого TextView прекрасно сочетается с верхним правым TextView . Вторая строка левого TextView немного выше второй строки нижнего правого TextView .

Кажется, что есть какая-то скрытая прокладка сверху и снизу TextView . Как я могу удалить это?

 setIncludeFontPadding (boolean includepad) 

или в XML это будет:

 android:includeFontPadding="false" 

Установите, включает ли TextView дополнительное верхнее и нижнее отступы, чтобы освободить место для акцентов, которые превышают нормальное восхождение и спуск. Значение по умолчанию – true.

Я чувствую твою боль. Я пробовал каждый ответ выше, в том числе setIncludeFontPadding – false, который ничего не сделал для меня.

Мое решение? layout_marginBottom="-3dp" в TextView дает вам решение для нижней, BAM!

Хотя, -3dp на layout_marginTop терпит неудачу …. тьфу.

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

 android:includeFontPadding="false" android:lineSpacingExtra="0dp" 

Добавление этих двух строк в TextView xml сделает работу.
Первый атрибут удаляет отступы, зарезервированные для акцентов, а второй атрибут удаляет интервал, зарезервированный для поддержания правильного пространства между двумя строками текста.

Не забудьте добавить lineSpacingExtra="0dp" в многострочном TextView, поскольку это может сделать появление неуклюже

Меня это тоже раздражало, и ответ, который я нашел, заключался в том, что в самом шрифте есть дополнительное пространство, а не TextView. Это довольно раздражает, исходя из фона публикации документов, ограниченного количества контроля над Android над типографскими элементами. Я бы рекомендовал использовать пользовательский шрифт (например, Bitstream Vera Sans, который лицензирован для перераспределения), который может не иметь этой проблемы. Однако я не уверен, действительно ли это делает.

       1       1       

С помощью дополнительного ImageView мы можем настроить TextView на выравнивание базовой линии с ImageView и установить android:baselineAlignBottom на ImageView равным true, что сделает базовый уровень ImageView снизу. Другие виды могут выравниваться, используя нижнюю часть ImageView, которая сама по себе аналогична базовой линии TextView.

Это, однако, фиксирует только нижнюю часть прокладки.

Я думаю, что эта проблема может быть решена таким образом:

     

Это результаты:

ScreenShot-1

ScreenShot-3

Хотя строка специальных символов в rightLowerText выглядит немного выше второй строки leftText, их базовые линии выравниваются.

Я удаляю интервал в своем пользовательском представлении – NoPaddingTextView.

https://github.com/SenhLinsh/NoPaddingTextView

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

 package com.linsh.nopaddingtextview; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.widget.TextView; /** * Created by Senh Linsh on 17/3/27. */ public class NoPaddingTextView extends TextView { private int mAdditionalPadding; public NoPaddingTextView(Context context) { super(context); init(); } public NoPaddingTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { setIncludeFontPadding(false); } @Override protected void onDraw(Canvas canvas) { int yOff = -mAdditionalPadding / 6; canvas.translate(0, yOff); super.onDraw(canvas); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { getAdditionalPadding(); int mode = MeasureSpec.getMode(heightMeasureSpec); if (mode != MeasureSpec.EXACTLY) { int measureHeight = measureHeight(getText().toString(), widthMeasureSpec); int height = measureHeight - mAdditionalPadding; height += getPaddingTop() + getPaddingBottom(); heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } private int measureHeight(String text, int widthMeasureSpec) { float textSize = getTextSize(); TextView textView = new TextView(getContext()); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); textView.setText(text); textView.measure(widthMeasureSpec, 0); return textView.getMeasuredHeight(); } private int getAdditionalPadding() { float textSize = getTextSize(); TextView textView = new TextView(getContext()); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); textView.setLines(1); textView.measure(0, 0); int measuredHeight = textView.getMeasuredHeight(); if (measuredHeight - textSize > 0) { mAdditionalPadding = (int) (measuredHeight - textSize); Log.v("NoPaddingTextView", "onMeasure: height=" + measuredHeight + " textSize=" + textSize + " mAdditionalPadding=" + mAdditionalPadding); } return mAdditionalPadding; } } 

Поскольку мое требование переопределяет существующий textView get from findViewById(getResources().getIdentifier("xxx", "id", "android")); , поэтому я не могу просто попробовать onDraw() другого ответа.

Но я просто выясню правильные шаги для исправления моей проблемы, вот окончательный результат от Layout Inspector:

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

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

Вот критический код для его исправления:

 Typeface mfont = Typeface.createFromAsset(getResources().getAssets(), "fonts/myCustomFont.otf"); myTextView.setTypeface(mfont); myTextView.setPadding(0, 0, 0, 0); myTextView.setIncludeFontPadding(false); 

Первый ключ – это настраиваемый шрифт «fonts / myCustomFont.otf», который имеет место внизу, но не сверху, вы можете легко определить это с помощью открытого файла otf и щелкнуть любой шрифт в android Studio:

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

Как вы можете видеть, курсор внизу имеет дополнительный интервал, но не сверху, поэтому он исправил мою проблему.

Второй ключ: вы не можете просто пропустить какой-либо код , иначе он может не работать. Вот почему вы можете найти, что некоторые люди комментируют, что ответ работает, а некоторые другие люди отмечают, что он не работает.

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

Без setTypeface(mfont); :

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

Без setPadding(0, 0, 0, 0); :

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

Без setIncludeFontPadding(false); :

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

Без 3 из них (т.е. оригинала):

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

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

Насколько мне известно, это присуще большинству виджетов, а количество «отступов» отличается от производителей телефонов. Это заполнение – это действительно пустое пространство между границей изображения и изображением в 9 файлах патча.

Например, на моем Droid X виджеты spinner получают лишнее пространство, чем кнопки, что делает его неудобным, когда у вас есть прядильщик с кнопкой, но на телефоне моей жены у того же приложения нет такой же проблемы и выглядит великолепно!

Единственное, что я хотел бы сделать, это создать ваши собственные файлы исправлений и использовать их в своем приложении.

Ahhh боли, которые являются Android.

Отредактировано: Уточнить пробел против пробела.

Простой метод:

 setSingleLine(); setIncludeFontPadding(false); 

Если это не сработало, попробуйте добавить это выше этого кода:

 setLineSpacing(0f,0f); // and set padding and margin to 0 

Если вам нужна многострочная линия, возможно, вам нужно будет точно рассчитать высоту верхнего и нижнего полей верхней части текстовой строки Temp (до и после удаления прокладки), затем применить результат уменьшения высоты с отрицательным отступом или некоторой маской Ghost с переводом Y. Лол

Видеть это:

Выравнивание ImageView с помощью EditText по горизонтали

Кажется, что фоновое изображение EditText имеет несколько прозрачных пикселей, которые также добавляют дополнение.

Решением является изменение фона по умолчанию EditText на что-то другое (или ничего, но фон для EditText, вероятно, неприемлем). Это можно сделать установкой android: фоновым атрибутом XML.

 android:background="@drawable/myEditBackground" 

Просто используйте

 android:padding="0dp" 
Interesting Posts

java.lang.RuntimeException: Невыполненный исходный код – что может вызвать это?

Создание приложений WPF выглядит в стиле Metro, даже в Windows 7? (Окон Хром / Темы / Тема)

Могу ли я использовать setFrame и автозапуск в одном представлении?

excel macro (VBA) для переноса нескольких столбцов в несколько строк

int array (сортировка от самого низкого до самого высокого)

Linux: восстановление файлов

Присоединить элементы массива?

Могу ли я заставить Windows 7 изменять настройки моего прокси-сервера на основе моего сетевого подключения?

Лучшая практика получения EntityManagerFactory

Указатель базового classа может указывать на объект производного classа. Почему наоборот?

Как получить реальный путь Java-приложения во время выполнения?

Макет деятельности: class fragmentа: vs android: атрибуты name

Как установить переменные среды с пробелами?

Ошибка: ошибка загрузки пакета или пространства имен для ggplot2 и для data.table

CodeIgniter не может отправлять электронную почту с помощью PHP mail ()

Давайте будем гением компьютера.