Проблема с OnFocus и скрытой софт-клавиатурой - PullRequest
1 голос
/ 25 февраля 2012

Я некоторое время искал в Интернете, чтобы убедиться, что здесь не было ни одного из них, но по какой-то причине я не могу найти точный способ сделать эту работу, и после 4 часов попыток я решил Я бы спросил экспертов.

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

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

Вот мой код: (имейте в виду, я сделал свой макет одновременно и фокусируемым, и кликабельным)

package com.example.haymaker;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

public class addAppointment extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.appointment);
    final EditText appointmentName = (EditText) findViewById(R.id.editText1);

    appointmentName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(appointmentName.getWindowToken(), 0);

            }
        }
    });


    }

}

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

Не используйте прослушиватель onFocusaged.,Просто внедрите OnTouchListener для слоя Outter, как LinearLayout, который покрывает весь экран.И в этом случае спрячьте клавиатуру.

См. Этот пример:

    MainActivity.java
package com.at.keyboardhide;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.at.bugsfixing.R;

public class MainActivity extends Activity implements OnTouchListener{
 private EditText getEditText;
 private LinearLayout getLinearLayout;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 this.getWindow().setSoftInputMode(
 WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.keyboardmain);
 getEditText = (EditText)findViewById(R.id.editText1);
 getLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout01);
 getLinearLayout.setOnTouchListener(this);
 }
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 if(v==getLinearLayout){
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0);
 return true;
 }
 return false;
 } 
} 

Он отлично работает для меня и надеюсь, что он вам тоже поможет.

Наслаждайтесь.:)

0 голосов
/ 25 февраля 2012

Это немного необычно, паттерн андроида, как правило, позволяет пользователям закрывать клавиатуру с помощью кнопки назад.

Если вы действительно хотите закрыть его, когда они касаются за пределами текста редактирования, вы можете добавить слушателей (ов) onTouch к основному виду и скрыть клавиатуру:

findViewById(R.id.you_main_view).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent e){
        if (e.getAction() == MotionEvent.ACTION_UP) hideSoftKeyboard();
        return false;
    }
}

Это немного сложно, потому что ваше содержащее представление может не обрабатывать прикосновения к подпредставлениям (например, представлениям списка), которые сами обрабатывают прикосновения. Возможно, вам придется добавить пару одинаковых сенсорных слушателей для разных представлений, чтобы весь экран регистрировал попадание. Убедитесь, что ваши сенсорные слушатели возвращают false, иначе они будут проглатывать клики, которые вы ожидаете обработать в другом месте.

...