получить ширину textview в символах

1

Я думаю, что это противоположность Set width of TextView с точки зрения символов

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

Я использовал свое тестовое Android-устройство, чтобы выяснить, сколько столбцов я могу поместить, но у эмулятора Android, похоже, есть ровно один меньше столбца, что делает вещи обернутыми уродливым способом в портретном режиме.

Есть ли способ узнать, сколько символов должно соответствовать 1 строке?

Теги:
layout

3 ответа

11
Лучший ответ

Ответ будет заключаться в использовании breakText() вашего объекта TextView Paint. Вот пример,

int totalCharstoFit= textView.getPaint().breakText(fullString,  0, fullString.length(), 
 true, textView.getWidth(), null);

Теперь totalCharstoFit содержит точные символы, которые могут быть помещены в одну строку. И теперь вы можете сделать строку sub вашей полной строки и добавить ее в TextView, как это,

String subString=fullString.substring(0,totalCharstoFit);
textView.append(substring);

И для вычисления оставшейся строки вы можете сделать это,

fullString=fullString.substring(subString.length(),fullString.length());

Теперь полный код,

Сделайте это в замкнутом цикле,

while(fullstirng.length>0)
{
int totalCharstoFit= textView.getPaint().breakText(fullString,  0, fullString.length(), 
     true, textView.getWidth(), null);
 String subString=fullString.substring(0,totalCharstoFit);
    textView.append(substring);
 fullString=fullString.substring(subString.length(),fullString.length());

}
  • 0
    Является ли breakText() надежным методом? Я задал вопрос: stackoverflow.com/q/56995362/1043882 Пожалуйста, смотрите это.
1

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

Я установил первую строку жирным шрифтом.

private void setLayoutListner( final TextView textView ) {
    textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            final Layout layout = textView.getLayout();

            // Loop over all the lines and do whatever you need with
            // the width of the line
            for (int i = 0; i < layout.getLineCount(); i++) {
                int end = layout.getLineEnd(0);
                SpannableString content = new SpannableString( textView.getText().toString() );
                content.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, end, 0);
                content.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), end, content.length(), 0);
                textView.setText( content );
            }
        }
    });
}

Попробуйте этот способ. Таким образом, вы можете применить несколько стилей.

Вы также можете получить ширину textview:

for (int i = 0; i < layout.getLineCount(); i++) {
        maxLineWidth = Math.max(maxLineWidth, layout.getLineWidth(i));
}
1

Ну, вы можете сделать математику, чтобы найти это, найти ширину персонажа, разделите ширину экрана на это, и у вас будет то, что вы ищете.

Но не лучше ли его спроектировать? Есть ли столбцы, которые вы можете группировать вместе? Отображать как графику, или даже полностью исключать?

Другое возможное решение - использовать что-то вроде viewpager. (Узнайте, сколько ширины столбцов соответствует первой странице, а затем разделите оставшиеся таблицы на вторую страницу).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню