Это моя идея:
Вы можете измерить текст тривиально с помощью .length()
, если его длина больше, чем желаемый предел, чем вырезать, поместив только подстроку. Но если вы хотите отобразить весь текст, вы можете реализовать onClickListener()
на этом TextView
, который будет отображать весь текст как Dialog
или что-то еще.
Другой подход, который, на мой взгляд, может подойти, заключается в создании разных макетов для экранов с разной плотностью, а затем добавьте свои xml android:maxLines="your limit"
android:textSize="some value"
и android:maxLength="@integer/mylimit"
(разные пределы и размеры для разной плотности). Осталось только измерить длину и показать только подстроку (или текст по умолчанию)
Что-то вроде:
String myText = "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla";
String clickForMore="...Click for more";
int limit = myActivity.this.getResources().getInteger(R.integer.limit); //dont forget to declare it in your string.xml
Представьте, что у нас есть 3 строки текста, и мы разрешили только 2 (с общей длиной int limit
). Кусочек нашего текста помещается внутри TextView
, но он не полностью показан. Нам нужно сообщить пользователю, что есть еще, чтобы прочитать ...
myTextView.setVisibility(View.INVISIBLE);// <--- takes the space in the container
if(clickForMore.length() < myText.length() && myText.length() > limit)// <--- avoiding negative place and checking if the entire text is inside the box or there are characters leftover.
{
String temp = myText.substring(0, limit-clickForMore.length());// <-- we cutting space from currently displayed (not original string) to append the `clickForMore` string information.
myTextView.setText(temp+clickForMore);
myTextView.setVisibility(View.VISIBLE);
myTextView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// display the dialog with full text....
return false;
}
}); //<--- instantiate the click listener
}
else
{
//the text fits the box and no need to slice it, just display it straight forward
}
myText.length() > limit
- Проверить, не перекрывает ли строка предел.
Реализуйте .addTextChangeListener()
(TextWatcher
), а в методе afterTextChange()
override реализуйте все, что я упоминал выше.
Затем вы создаете onClickListener()
для TextView
, где вы делаете диалог, а затем показывает свой текст как есть.
Надеюсь, вы найдете эту идею разумной. Если вам нужно больше объяснений, что я имел в виду, напишите мне.