Освой Java играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

TextUtils

Класс TextUtils относится к пакету android.text и содержит несколько полезных и удобных методов для работы с текстом.

Проверка на пустоту - метод isEmpty()

Проверить, что строка пуста или null можно с помощью метода isEmpty(), указав в параметре строковую переменную.


String tmp = "cat";
if (!TextUtils.isEmpty(tmp)){
	Toast.makeText(this, "Строка не пуста", Toast.LENGTH_LONG).show();
}

Метод commaEllipsize()

С помощью метода commaEllipsize() можно укоротить длинную строку, заменив её на сокращённый вариант. Данный способ следует использовать осторожно и в тех случаях, когда информация не столь важна или есть способ получить полный вариант, например, при переходе на следующую активность с детализацией.

Для сравнения добавим на экран две текстовые метки и посмотрим на результат.


package ru.alexanderklimov.text;

import ...

public class MainActivity extends Activity {
	
	final String cats = "Васька, Мурзик, Барсик, Рыжик, Пыжик, Матроскин, Бублик";

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);

		final TextView textView1 = findViewById(R.id.textView1);
		textView1.setText(cats);
	}
	
	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
	    super.onWindowFocusChanged(hasFocus);
	    
	    final TextView textView2 = findViewById(R.id.textView2);
	    updateEllipsizedText(textView2, cats);
	}

	private void updateEllipsizedText(TextView tv, String text) {
		TextPaint textPaint = tv.getPaint();
		tv.setText(text);
		float avail = tv.getMeasuredWidth();
		//String oneMore = "one more";
		String oneMore = "и ещё...";
		//String more = "%d more";
		String more = "и ещё %d др.";
		CharSequence ellipsizedText = TextUtils.commaEllipsize(text, textPaint, avail,
				oneMore, more);
		tv.setText(ellipsizedText);
	}
}

В методе onCreate() вызывать укорачивание текста не стоит, так как метод getMeasuredWidth() просто не успеет отработать во время загрузки компонентов на экран. Поэтому код для второй метки перенесён в метод onWindowFocusChanged(). В результате, вы видите, что в первом случае длинный текст растянулся на две строчки, а во втором случае текст динамически укоротился. Если повернуть устройство в альбомную ориентацию, то укорачивания не произойдёт. Также следует учитывать, что слова, предназначенные для замены длинного текста, также имеют свою длину. В комментариях оставлен альтернативный вариант для английского текста.

TextUtils

Реклама