초점을 맞추고 소프트 키보드가 숨겨진 문제
-
12-11-2019 - |
문제
여기에 온라인에서 온라인으로 바라 보았습니다. 이제 여기에 이미이 중 하나가 없었는지 확인했습니다. 그러나 어떤 이유로 나는이 작업을 수행하는 정확한 방법을 찾을 수없는 것처럼 보일 수 없습니다.전문가에게 물어 보겠습니다.
소프트 키 보드를 숨길 수있는 내 배경을 클릭하면 트리거가 발생할 때 창을로드 할 때 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;
}
}
.
그것은 나를 위해 완벽하게 작동하고 또한 당신을 도울 것입니다.
즐기십시오.:)