Я думаю, что это противоположность Set width of TextView с точки зрения символов
У меня есть TextView, где я показываю некоторые данные отчета. Я использую моноширинный TypefaceSpan для части его, потому что мне нужны столбцы для выравнивания.
Я использовал свое тестовое Android-устройство, чтобы выяснить, сколько столбцов я могу поместить, но у эмулятора Android, похоже, есть ровно один меньше столбца, что делает вещи обернутыми уродливым способом в портретном режиме.
Есть ли способ узнать, сколько символов должно соответствовать 1 строке?
Ответ будет заключаться в использовании 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());
}
Вы можете получить общую строку 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));
}
Ну, вы можете сделать математику, чтобы найти это, найти ширину персонажа, разделите ширину экрана на это, и у вас будет то, что вы ищете.
Но не лучше ли его спроектировать? Есть ли столбцы, которые вы можете группировать вместе? Отображать как графику, или даже полностью исключать?
Другое возможное решение - использовать что-то вроде viewpager. (Узнайте, сколько ширины столбцов соответствует первой странице, а затем разделите оставшиеся таблицы на вторую страницу).
breakText()
надежным методом? Я задал вопрос: stackoverflow.com/q/56995362/1043882 Пожалуйста, смотрите это.