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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
#1

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

26.05.2015, 14:46. Просмотров 1087. Ответов 8
Метки нет (Все метки)

Здравствуйте! Только начала изучать андроид. Пишу свою клавиатуру по образцу гайда на 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>
У меня не получается найти решение, хотя бы примерно, в какую сторону смотреть. Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2015, 14:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Положение своей клавиатуры на экране с полем ввода, спрятать клавиатуру (Программирование Android):

Спрятать клавиатуру в EditText - Программирование Android
На экране есть несколько EditText. Нужно, чтобы при нажатии на определенный из них не выдвигалась клавиатура. Как это можно реализовать и...

Отследить положение на экране ползунка из SeekBar - Программирование Android
Подскажите, возможно ли это реализовать. Задача такая: отследить положение ползунка в SeekBar и чуть выше в TextView вывести значение...

Разработать программу ручного ввода с клавиатуры произвольной траектории с изображением вводимой траектории на экране - C++
Разработать программу ручного ввода с клавиатуры произвольной траектории с изображением вводимой траектории на экране. Точки траектории...

Хук на клавиатуру без своей DLL не запускается на ХР, но на 7 работает отлично - C++ WinAPI
Пишу глобальный хук без написания своего длл( читал, что WH_KEYBOARD_LL это позволяет, да и у меня всё с первого раза получилось ) и всё у...

Положение курсора на экране - Assembler
Здравствуйте. Столкнулся с такой проблемой. Хочу получить положение курсора на экране. Использую для этого функцию 03 прерывания 10h. Но...

положение мыши на экране - Java SE
подскажите функцию, которая отслеживает положение курсора, когда еще не совершено нажатие

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
28.05.2015, 18:02 #3
Цитата Сообщение от santanika Посмотреть сообщение
Но все таки, интересно, как это сделать через клавиатуру?
Это на планшете такое? На телефоне нормально работает? По идее в андроид в альбомной ориентации по умолчанию все EditText'ы разворачиваются на все свободное от клавиатуры место. И видимо для планшетов, где нужно, как раз указывают данную опцию, чтобы поле не разворачивалось.
santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
28.05.2015, 18:06  [ТС] #4
Да, приложение заточено под планшет (ирбис), и клавиатуру я пишу для конкретного приложения.
При тесте разных клавиатур с плеймаркета такой проблемы не возникало, хотя этот флаг не был установлен. Поэтому у меня возникает подозрение, что как то из инпутсервисманагера или сервиса это можно сделать.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
28.05.2015, 19:39 #5
santanika, попробуйте это.
santanika
2 / 2 / 0
Регистрация: 26.05.2015
Сообщений: 36
02.06.2015, 10:10  [ТС] #6
Спасибо!
Но я не могу сообразить, где взять EditoInfo, или стоит создать его самой, но кому скормить?
_________________

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

Положение курсора на экране - Delphi
У меня есть панелька 400x400. Допусти положения курсора в ней по x=267. И есть размер экрана 1366x768. Мне надо что бы при наведении...

Положение блока на экране - HTML, CSS
В общем как ни странно не выходит сделать правильное положение блока div. а именно интерисует выравнивание по высоте. По ширине все...

Положение окна на экране - C++ Builder
Всем доброго времени суток. Кто может подсказать как определить и программно изменить положение окна на экране?

Положение окна на экране - C# WPF
Здравствуйте! Есть монитор с разрешением 1280х1024, разработал под него приложение. В xaml свойства окна стоят height = 1024, width - 1280....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.06.2015, 16:53
Ответ Создать тему
Опции темы

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