문제

여기에 온라인에서 온라인으로 바라 보았습니다. 이제 여기에 이미이 중 하나가 없었는지 확인했습니다. 그러나 어떤 이유로 나는이 작업을 수행하는 정확한 방법을 찾을 수없는 것처럼 보일 수 없습니다.전문가에게 물어 보겠습니다.

소프트 키 보드를 숨길 수있는 내 배경을 클릭하면 트리거가 발생할 때 창을로드 할 때 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);

            }
        }
    });


    }

}
.

도움을 주셔서 감사합니다

도움이 되었습니까?

해결책

이것은 조금 특이한 안드로이드 패턴이 일반적으로 사용자가 뒤로 버튼을 사용하여 키보드를 닫을 수있게하는 것입니다.

편집 텍스트 외부에서 터치 할 때 실제로 닫으려면 ontouch listener를 기본보기에 추가하고 키보드를 숨길 수 있습니다.

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를 반환하는지 확인하거나 다른 곳에서는 처리 할 예정인 클릭을 제시하게됩니다.

다른 팁

OnFocusChanged Listener를 사용하지 마십시오....에전체 화면을 덮는 LinearLayout과 같이 외부 레이어에 대한 OnTouchListener를 구현하십시오.그리고 해당 이벤트에서 키보드를 숨 깁니다.

이 예제를 참조하십시오.

    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;
 } 
} 
.

그것은 나를 위해 완벽하게 작동하고 또한 당신을 도울 것입니다.

즐기십시오.:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top