Небольшой экран мобильного устройства требует тщательной проработки расположения элементов пользовательского интерфейса. Экранная клавиатура также охватывает много места на экране. Но в то же время Android предоставляет возможности гибкой настройки для отображения экранной клавиатуры и текстовых полей.
Настройка режимов отображения устанавливается в файле манифеста приложения для каждого Activity, входящего в состав приложения. В элементе <activity> для этого существует необязательный атрибут (по умолчанию он отсутствует) android:windowSoftInputMode.
Этот атрибут определяет два типа вариантов поведения экранной клавиатуры и текстовых полей, находящихся в данном Activity — состояние отображения экранной клавиатуры и поведение текстовых полей при получении или потере фокуса и вводе текста.
Варианты поведения экранной клавиатуры могут быть следующими:
Теперь изменим поведение приложения, поменяв значение в атрибуте android:windowSoftInputMode в манифесте приложения:
Есть еще один режим отображения программируемой клавиатуры. Он используется, когда система полагает, что на экране мало места для отображения всех элементов. В этом случае система автоматически выведет только одно текстовое поле, которое находится в фокусе ввода, экранную клавиатуру и добавит на экран кнопку Next для возможности перехода к следующему элементу или возврату к отображению полного окна, если элементы кончились. Например, в нашем приложении такая ситуация может возникнуть, если его перевернуть в горизонтальное положение.
Настройка режимов отображения устанавливается в файле манифеста приложения для каждого Activity, входящего в состав приложения. В элементе <activity> для этого существует необязательный атрибут (по умолчанию он отсутствует) android:windowSoftInputMode.
Этот атрибут определяет два типа вариантов поведения экранной клавиатуры и текстовых полей, находящихся в данном Activity — состояние отображения экранной клавиатуры и поведение текстовых полей при получении или потере фокуса и вводе текста.
Варианты поведения экранной клавиатуры могут быть следующими:
- stateUnspecified — система сама выбирает подходящее поведение экранной клавиатуры. Это настройка по умолчанию;
- stateUnchanged — экранная клавиатура при получении Activity (на котором текстовое поле) фокуса ввода сохраняет свое последнее состояние, видимое или скрытое;
- stateHidden — экранная клавиатура скрыта, когда пользователь открывает Activity. Клавиатура появится при наборе текста. Если пользователь перейдет к следующему Activity, клавиатура скроется. Но при возвращении назад клавиатура останется на экране, если она была видима при закрытии Activity;
- stateAlwaysHidden — экранная клавиатура всегда скрывается, если Activity получает фокус;
- stateVisible — экранная клавиатура видима в обычном режиме (поведение такое же, как в приложении из предыдущего раздела);
- stateAlwaysVisible — экранная клавиатура отображается сразу, когда пользователь открывает Activity.
- adjustResize — размеры элементов, находящихся на Activity, могут изменяться, освобождая место для экранной клавиатуры;
- adjustPan — окно Activity и его элементы не изменяются при отображении экранной клавиатуры, только автоматически подстраиваются, чтобы текстовое поле, находящееся в фокусе ввода, не было закрыто клавиатурой. Такое поведение используется реже, т. к. остальные элементы, находящиеся на этом Activity, например кнопки, становятся недоступными, и надо закрывать клавиатуру для доступа к ним;
- adjustUnspecified — система Android автоматически выберет один из перечисленных ранее режимов в зависимости от компоновки окна Activity и количества дочерних элементов управления на нем. Это настройка по умолчанию для Activity.
<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . </activity>Чтобы разобраться, как эти настройки поведения экранной клавиатуры и текстовых полей выглядят на экране, создадим новый проект EditTextInputModes. В файл манифеста приложения добавим атрибут android:windowSoftInputMode и выставим ему значение stateVisible|adjustPan.
Файл манифеста приложения AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android= "http://schemas.android.com/apk/res/android" package="com.samples.ui.edittextinputmode" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".EditInputModeActivity" android:windowSoftInputMode="stateVisible|adjustPan"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>В файле компоновки main.xml окна приложения используем три текстовых поля такого же типа, как в предыдущей программе, но внесем некоторые изменения — с помощью атрибутов android:layout_height и android:layout_weight равномерно распределим эти поля на весь экран.
Файл компоновки main.xml для проекта EditTextInputModes
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="fill_parent" android:inputType="textEmailAddress" android:layout_weight="1" android:hint="Enter e-mail"/> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="fill_parent" android:inputType="number" android:hint="Enter number" android:layout_weight="1" /> <EditText android:id="@+id/editText3" android:layout_width="match_parent" android:layout_height="fill_parent" android:inputType="textPassword" android:hint="Enter password" android:layout_weight="1" /> </LinearLayout>Если запустить приложение и начать вводить информацию в текстовые поля, будет отображена экранная клавиатура и одновременно пропорционально уменьшатся размеры по вертикали всех текстовых полей.
Теперь изменим поведение приложения, поменяв значение в атрибуте android:windowSoftInputMode в манифесте приложения:
android:windowSoftInputMode="stateVisible|adjustPan"Если перекомпилировать и запустить приложение, то при вводе текста в режиме adjustPan экранная клавиатура будет затенять часть окна Activity вместе с элементами.
Есть еще один режим отображения программируемой клавиатуры. Он используется, когда система полагает, что на экране мало места для отображения всех элементов. В этом случае система автоматически выведет только одно текстовое поле, которое находится в фокусе ввода, экранную клавиатуру и добавит на экран кнопку Next для возможности перехода к следующему элементу или возврату к отображению полного окна, если элементы кончились. Например, в нашем приложении такая ситуация может возникнуть, если его перевернуть в горизонтальное положение.
Комментариев нет:
Отправить комментарий