Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
SINIGR
1 / 1 / 1
Регистрация: 24.07.2011
Сообщений: 34
#1

Обработка нажатий клавиш программной клавиатуры - Программирование Android

06.12.2014, 16:34. Просмотров 3337. Ответов 16
Метки нет (Все метки)

Не знаю, была ли эта тема. Но столкнулся с такой проблемой: допустим есть макет с EditText и ListView. Они отображаются сверху вниз в порядке описания. Необходимо записать текст в EditText, а затем по нажатию клавиши, добавить этот текст в ListView, через адаптер.

Следующий код, как я уже выяснил не работает с программной клавиатурой, а только с физической:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
EditText editText = (EditText) findViewByID(R....);
editText.setOnKeyListener(new OnKeyListener()
{
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
             if (event.getAction() == KeyEvent.ACTION_DOWN)
                 if ((keyCode == KeyEvent.KEYCODE_ENTER))
                 {    // Это событие не наступает
                       String newItem = editText.getText().toString();
                       list.add(newItem);
                       adapter.notifyDataSetChanged();
                 }
        }
}
);
Каким образом можно реализовать данное поведение?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2014, 16:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка нажатий клавиш программной клавиатуры (Программирование Android):

Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто) - Программирование Android
Уважаемые форумчане! Буду благодарен за любую помощь. Написал добрую часть приложения для Android, состоящего из Активности и...

Обработка нажатий - Программирование Android
Господа подскажите как определить что пользователь провел пальцем влево или в право? Отслеживать в onTouch координаты? Если Х...

Fragment обработка нажатий - Программирование Android
Здравствуйте. Есть 9 Layout-ов. Каждый выступает в роли контейнера для фрагментов. Вопрос в следующем. Не могу сделать обработку нажатий на...

Обработка нажатий на виджет - Программирование Android
Почему не работает при нажатии на виджет? @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int...

Sliding Menu обработка нажатий - Программирование Android
Кто нибудь использовал данную библиотеку? menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); ...

Обработка нажатий внутри класса адаптера - Программирование Android
Можно ли обрабатывать нажатия в классе адаптера expandablelistview? Если нет, то что будет если я поставлю там обработчики?

16
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
06.12.2014, 19:15 #2
SINIGR, Вам нужен OnEditorActionListener.
0
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
06.12.2014, 20:39 #3
...или TextWatcher
0
SINIGR
1 / 1 / 1
Регистрация: 24.07.2011
Сообщений: 34
06.12.2014, 23:47  [ТС] #4
TextWatcher здесь не подойдет, насколько я понимаю, хотя, конечно, могу быть не прав.

Добавлено через 23 минуты
По умолчанию при нажатии на кнопку "enter" в телефоне, в Edittext происходит переход на новую строку. Вообще возможно обработать событие нажатия этой кнопки, либо других, например цифр. Если да, вы могли бы привести фрагмент кода?
0
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
07.12.2014, 10:29 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Предупреждаю сразу - это чисто в доказательство реализации через TextWatcher.
Даже, если это вариант удаления гланд через задницу - я не виноват.

Вводим переменную, хрянящую текст до момента нажатия.
В момент изменения смотрим на введенный символ и, если это возврат каретки, выводим ранее введенный текст.

Задача решена - есть перехват ввода 'энтер' и реакция на его ввод.
Полетит ли этот самолёт дальше - не знаю.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
EditText editText = (EditText) findViewByID(R....);
 
String cEditTextString; //Вводим переменную, хрянящую текст до момента нажатия
 
TextWatcher twTextWatcher = new TextWatcher(){
 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                cEditTextString = s.toString(); // запоминаем предыдущее состояние
    
            }
 
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                                //обрабатываем нажатие
                if (s.charAt(start)=='\n') 
                    Toast.makeText(getBaseContext(), "Enter is pressed. \n"+
                        "EditText text: "+cEditTextString, Toast.LENGTH_SHORT).show();          
            }
            
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                };
            };
            
        }; 
 
editText.addTextChangedListener(twTextWatcher);
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
07.12.2014, 11:36 #6
Armagedo, да уж, не сильно изящно =)
SINIGR, добавляем в разметку editText-а строку
XML
1
android:imeOptions="actionDone"
В коде:
Java
1
2
3
4
5
6
7
8
9
10
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    //TODO
                    return true;
                }
                return false;
            }
        });
1
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
07.12.2014, 12:02 #7
YuraAAA, ну выковривание 'энтер' и налепливание 'дан' на программной клавиатуре тоже как-бы не особо...
На физической клавиатуре тоже так можно?
0
SINIGR
1 / 1 / 1
Регистрация: 24.07.2011
Сообщений: 34
07.12.2014, 12:30  [ТС] #8
Вариант с TextWatcher по крайней мере работает, кое-как, а вот с setOnEditorActionListener у меня не ловит события, причем сделал все в том же виде, что и у вас.
0
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
07.12.2014, 12:38 #9
Еще один
Что значит "кое-как"?
Как вы измерили эту величину и в чем отличие от реализованных вами методов, которые работают "не кое-как"?
1
SINIGR
1 / 1 / 1
Регистрация: 24.07.2011
Сообщений: 34
07.12.2014, 12:43  [ТС] #10
Armagedo, вам большое спасибо за это, все работает, но просто интересно, это единственный способ, нет ли аналогичного способа как с обработкой физической клавиатуры
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
07.12.2014, 13:03 #11
Armagedo,
Цитата Сообщение от Armagedo Посмотреть сообщение
ну выковривание 'энтер' и налепливание 'дан' на программной клавиатуре тоже как-бы не особо...
что значит не очень, если на это рассчитан этот функционал?оО
0
SINIGR
1 / 1 / 1
Регистрация: 24.07.2011
Сообщений: 34
07.12.2014, 13:28  [ТС] #12
В общем, спасибо всем, получилось сделать все как нужно!

Добавлено через 1 минуту
YuraAAA, И все таки, через setOnEditorActionListener у меня не отлавливались события, вы можете предположить с чем это связанно?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
07.12.2014, 13:30 #13
SINIGR, покажите код. Как Вы проверили, что не ловится? Я такого не видел ещё =)
0
SINIGR
1 / 1 / 1
Регистрация: 24.07.2011
Сообщений: 34
07.12.2014, 13:47  [ТС] #14
YuraAAA,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MyKeyListener extends Activity
{
    private EditText editText;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_key_listener);
 
        editText = (EditText) findViewById(R.id.myedit);
        editText.setOnEditorActionListener(new EditText.OnEditorActionListener()
        {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
            {
                if (actionId == EditorInfo.IME_ACTION_DONE)
                {
                    Toast.makeText(MyKeyListener.this, "Enter is pressed!", Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            }
 
        });
 
    }
 
}
XML
1
2
3
4
5
<EditText
        android:id="@+id/myedit"
        android:imeOptions="actionDone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
На экран ничего не выводит, просто происходит переход на след. строку
0
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
07.12.2014, 14:59 #15
SINIGR, добавь в xml для эдитбокса аттрибут inputType

XML
1
2
3
4
5
6
<EditText
android:id="@+id/myedit"
android:inputType="text"
android:imeOptions="actionDone"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
и всё получится
Note the use of two optional attributes.
In conjunction with android:inputType=”text”, android:imeOptions=”actionDone” configures the soft keyboard to show a Done key in place of the Enter key.
1
07.12.2014, 14:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2014, 14:59
Привет! Вот еще темы с ответами:

Обработка нажатий на сам фрагмент а не на отдельную кнопку - Программирование Android
Как повесить обработку нажатий на весь фрагмент а не на отдельное View внутри фрагмента? Добавлено через 2 минуты Есть 2 фрагмента...

Обработка нажатий кнопок созданных программно в заданном месте разметки - Программирование Android
Здравствуйте, собственно проблема: как сделать кнопки в андроид(не простые через button@id а золотые), кнопки округлой формы, желательно с...

Как убрать preview клавиш со своей клавиатуры? - Программирование Android
И снова я со своей клавой... Все расчудесно, но выявили такой баг: если ткнуть в клавиатуру и повозить пальчиком во все стороны, то она...

Можно ли улавливать нажатия клавиш стороней клавиатуры? - Программирование Android
Например встроенной softkeybord from Google, без того, чтобы прописывать клавиатуру в своем приложении.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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