Форум программистов, компьютерный форум CyberForum.ru

Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру - Android

Восстановить пароль Регистрация
 
santanika
 Аватар для santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
26.05.2015, 14:46     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #1
Здравствуйте! Только начала изучать андроид. Пишу свою клавиатуру по образцу гайда на developer.android.com
Требуется реализовать свою кнопку, сворачивающую клавиатуру
Кликните здесь для просмотра всего текста
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void onKey(int primaryCode, int[] keyCodes) {
        InputConnection ic = getCurrentInputConnection();
 
        switch(primaryCode){
 
            case NovaKB.KEYCODE_TURN_DOWN:
//                InputMethodManager in = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
//                in.hideSoftInputFromWindow(kv.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
//                getWindow().setSoftInputMode(
//                        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
 
//                this.getWindow().hide();
//                this.stopSelf();
 
 
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
 
                kv.setVisibility(View.GONE);
                kv.setFocusable(false);
 
                break;
           
    }


Мой класс extends ImputMethodService и все закоменченные попытки не дают результата, потому что у меня нет Activity. Hide прячет клавиатуру, но операционная система не получает сигнала о том, что клавиатура свернута.

Еще вопрос, при тестировании выяснилось, что в приложениях с многострочными текстовыми полями клавиатура растягивает эти поля на полэкрана.
Вьюшка
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<android.inputmethodservice.KeyboardView
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
 
 
    android:keyPreviewLayout ="@layout/preview"
    android:keyBackground="@drawable/select_state"
    android:background="@color/candidate_background"
    android:keyTextColor="#ff000000"
 
    />
Манифест
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nova.novakeyboard">
 
    <application android:allowBackup="true" android:label="@string/app_name"
        android:windowSoftInputMode="stateVisible"
        android:icon="@drawable/kbhide" android:theme="@style/AppTheme">
        <service android:name="IME"
            android:label="@string/ime"
            android:permission="android.permission.BIND_INPUT_METHOD"
            android:windowSoftInputMode="adjustPan"
 
            >
            <meta-data android:name="android.view.im" android:resource="@layout/method"/>
            <intent-filter>
                <action android:name="android.view.InputMethod" />
            </intent-filter>
        </service>
 
    </application>
 
</manifest>
У меня не получается найти решение, хотя бы примерно, в какую сторону смотреть. Помогите, пожалуйста!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
santanika
 Аватар для santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
28.05.2015, 16:17  [ТС]     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #2
Проблемка сворачивания своей клавиатуры решилась.

Javascript
1
2
3
4
5
6
7
8
9
10
11
private InputMethodManager imm =(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
public void onKey(int primaryCode, int[] keyCodes) {
        InputConnection ic = getCurrentInputConnection();
 
        switch(primaryCode){           
 
            case MyKeyboard.KEYCODE_HIDE:
                imm.hideSoftInputFromInputMethod(getToken(), 0);
                break;           
         }   
    }
Таким образом клавиатура сворачивается, не стирает написанный текст, и Андроид понимает, что клава свернулась (навигейшн бар сменяется, и при повторном тыке на текст поле, клава вызывается с первого раза).

Вторая проблема с растягиванием текстового поля актуальна, так же надо убрать самосгенеренную кнопку Готово-Далее при тыке на текст поле.

Добавлено через 4 часа 46 минут
Проблемка с растягиванием текст поля решилась указанием в свойствах текстового поля в хмл'е

XML
1
android:imeOptions="flagNoExtractUi"
Но все таки, интересно, как это сделать через клавиатуру? Ведь с родной клавиатурой наверняка не все текстовые поля прописаны таким флагом, а не растягиваются.

Я очень извиняюсь, криво обозвала тему. Надо было что то типа "Спрятать клавиатуру без Activity, изменить поведение текстового поля при вызове custom keyboard"... Или покороче. В следующий раз исправлюсь.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.05.2015, 18:02     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #3
Цитата Сообщение от santanika Посмотреть сообщение
Но все таки, интересно, как это сделать через клавиатуру?
Это на планшете такое? На телефоне нормально работает? По идее в андроид в альбомной ориентации по умолчанию все EditText'ы разворачиваются на все свободное от клавиатуры место. И видимо для планшетов, где нужно, как раз указывают данную опцию, чтобы поле не разворачивалось.
santanika
 Аватар для santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
28.05.2015, 18:06  [ТС]     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #4
Да, приложение заточено под планшет (ирбис), и клавиатуру я пишу для конкретного приложения.
При тесте разных клавиатур с плеймаркета такой проблемы не возникало, хотя этот флаг не был установлен. Поэтому у меня возникает подозрение, что как то из инпутсервисманагера или сервиса это можно сделать.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
28.05.2015, 19:39     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #5
santanika, попробуйте это.
santanika
 Аватар для santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
02.06.2015, 10:10  [ТС]     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #6
Спасибо!
Но я не могу сообразить, где взять EditoInfo, или стоит создать его самой, но кому скормить?
_________________

Это наверное в другую тему надо - хотела затемнить кнопки на клавиатуре - шифт, язык, пробел, ентер и тд - функциональные кнопки. И опять получается, что надо задавать текствью imeOptions. Есть ли другое решение?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
02.06.2015, 10:57     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #7
Цитата Сообщение от santanika Посмотреть сообщение
где взять EditoInfo
А зачем вам его откуда-то брать? Он сам придет) метод же override, что обычно значит что он уже где-то вызывается. Точно так же как onCreate в активити, туда приходит bundle с сохраненными параметрами, даже если в ручную их не сохранять.
santanika
 Аватар для santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
02.06.2015, 11:07  [ТС]     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #8
Так. Я подумаю над этим позже. Спасибо огромное за наводку, обязательно надо попытаться воткнуть это в свой код. Сейчас затык с этими кнопками, и еще сидеть и выравнивать надоть, чтоб не сдвигалось при смене языка. И еще у м еня смутное подозрение, что кривовато менять язык setKeyboard...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2015, 16:53     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру
Еще ссылки по теме:

Убрать цифровую клавиатуру Android
Android Убрать клавиатуру
Android Показать/скрыть экранную клавиатуру
Не могу скрыть клавиатуру Android
Android Спрятать клавиатуру в EditText

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
santanika
 Аватар для santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
08.06.2015, 16:53  [ТС]     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру #9
Нашла, как применить. У InputMethodService'a есть метод, который я оверрайд:
Java
1
2
3
public void onStartInputView(EditorInfo attribute, boolean restarting) {
        attribute.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;
}
Yandex
Объявления
08.06.2015, 16:53     Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру
Ответ Создать тему
Опции темы

Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru