Показаны сообщения с ярлыком EditText. Показать все сообщения
Показаны сообщения с ярлыком EditText. Показать все сообщения

среда, 14 марта 2012 г.

Android: отображение форматированного текста в EditText

Однажды мне понадобилось реализовать выделение цветом текста в EditText. На первый взгляд задача казалась нетривиальной, ведь стандартные механизмы форматирования текста для этого виджета весьма убогие. Методами setTypeface, setTextSize и setTextColor можно менять начертание, размер и цвет всего текста, но не отдельных слов. А ведь как было бы здорово использовать обычную html-разметку и "раскрашивать" отдельные участки текста независимо друг от друга...
Собственно, так мы и сделаем :)

Как загрузить html в EditText?
В этом нам помогут два класса: android.text.Html и android.text.Spanned:

public class SpannedTestActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EditText hello = new EditText(this);
        Spanned s = Html.fromHtml("this is <font color=\"red\">red</font>");
        hello.setText(s);
 
        setContentView(hello);
    }
}

Какие теги можно использовать?
Список этих тегов отсутствует в официальной документации, но если порыться в сети или в исходниках Android, то можно накопать следующее:

a href="...", b, big, blockquote, br, cite, dfn, div align="...", em, font size="..." color="..." face="...", h1-h6, i, img src="...", p, small, strike, strong, sub, sup, tt, u

Как видите, в EditText (как и в его предка TextView, кстати) вполне можно вывести форматированный текст.

пятница, 15 июля 2011 г.

Android: Управляем виртуальной клавиатурой программно

В современных Android-смартфонах виртуальная (экранная) клавиатура очень полезный инструмент - это мало кто поставит под сомнение. А для разработчика она приятна ещё и своей гибкостью. Тут я приведу пару приёмов по управлению этим "девайсом".

Изменить вид клавиатуры для данного EditText-а:
EditText ipt = new EditText(this);
ipt.setInputType(InputType.TYPE_CLASS_PHONE);  - установит клавиатуру для ввода номера телефона. Другие варианты:
TYPE_CLASS_DATETIME - дата и время
TYPE_CLASS_NUMBER - цифры
TYPE_CLASS_TEXT - буквы

Убрать клавиатуру с экрана:
Context context = getApplicationContext();
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
Тут edit - EditText для которого нужно скрыть клавиатуру.
Код так выглядит, если писать его в Activity. Если расположить его в другом классе, экземпляр Activity нужно передать туда как параметр и вызывать методы как  act.getApplicationContext(), где act - экземпляр Activity