나는 내 '와' 버튼 '한' 에디트스트 레이아웃용.
'버튼을 클릭하면 쓴 이후) 의 편집 및 필드', i want to 숨김니다 가상 키보드. 난 것으로 추정하고 있지만, 이것은 간단한 코드를 예가 어디서 찾을 수 있는가?
Android 숨김니다 가상 키보드 사용 할 수 있는 힘 린퍼트메서드먼거, [2], ['히데소프티노푸트프롬윈도프'] 호출하십시오 반군지역 토큰인지 들어 있는 창의 집중 보기입니다.
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
이렇게 하면 키보드를 인력용 감춰집니다 일부 상황에서. 경우에 따라서는 두 번째 매개변수입니다 InputMethodManager.HIDE_IMPLICIT_ONLY 통과될 수 있도록 할 것입니다 '으로' you only 키보드 사용자가 직접 인력용 정보기술 (it), t # 39 숨김니다 didn& 표시되려면 (누른 메뉴).
Note:* 이렇게 할 경우 코틀린 사용합니다. ' (Context.INPUT_METHOD_SERVICE) 를 린퍼트메서드먼거 그제시스템저비스 컨텍스트로?'
코틀린 구문 *
// Check if no view has focus:
val view = this.currentFocus
view?.let { v ->
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
imm?.hideSoftInputFromWindow(v.windowToken, 0)
}
[2]: http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html # %20int% hideSoftInputFromWindow% 28android.os.ibinder, 29
I want to 숨김니다 방식이다. 내가 안드로이드 다음 문장을 통해 제공할 수 있을 것으로 기대됩니다. '키보르자히데 ()'. 및끝. 감사합니다. 하지만 안드로이드 문제가 있습니다. 린퍼트메서드먼거 숨김니다 '키보드' 를 사용해야 합니다. 알았어, 이는 Android& # 39 의 API 를 방식이다. 하지만! 투명지에 합니다 '에서' 컨텍스트로 액세스하려면 IMM. 이제 우리는 문제다. 내가 키보드 숨길 수 없는 '에서' 필요한 모든 사용 또는 정적 클래스 또는 유틸리티에는 컨텍스트로. imm, 또는 더 먼 지정해야 합니다 뭐라구오 보기 ' (심지어 더 뭐라구오 창') 에서 키보드를 숨기려는.
이는 어떨거라고 숨어 있는 키보드가 너무 어렵습니다. 당담자님께 Google: # 39 m, I& 때 찾는 된장 케이크, '없다' 에 대한 레시페프로비더 제공을 거부할 것이라고 그 누가 나를 된장 케이크 적립율은 의해 먹히고 있는 오토메이티드 않으면 될 것이라고 내가 처음 먹어!!
슬픈 이야기 the ugly) 이 끝나는 진실: 안드로이드 키보드 숨김니다 2 형태의 식별 제공해야 할 수 있습니다. '보기' 또는 '윈도' 다음 'a' 컨텍스트로.
내가 작업을 수행할 수 있는 방법을 제공하는 아주 단단하게 만든 정적임 유틸리티에는 전화하시기 정보기술 (it) '에서 활동,'.
public static void hideKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
//Find the currently focused view, so we can grab the correct window token from it.
View view = activity.getCurrentFocus();
//If no view currently has focus, create a new one, just so we can grab a window token from it
if (view == null) {
view = new View(activity);
}
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
활동, '에서' 라는 점을 유념하십시오 emcpreg 메서드입니다 경우에만 작동합니다! 위의 메서드 호출 대상 '활동' 을 '적절한 기간' 제커랑포쿠스 페치할 토큰인지.
하지만 예를 들어 'a' 에서 '에서 키보드를 숨기려는 에디트스트 호스팅된 디아로그프라그먼트'? # 39 는 다음과 같은 방법을 사용하여 위 can& 있습니다.
hideKeyboard(getActivity()); //won't work
이 때문에 작동합니까 you& won& # 39, t # 39, & # 39 '조각' ll be 반군지역 대한 참조입니다 활동, ',' 에 초점을 맞추고 있는 반면 '조각' 제어할 수 있는 방법이 없으므로 호스트입니다 표시됨을! 와우! 그래서 숨기기 위한 수단으로, 키보드, 조각, 내가 더 공통, 추악한 의 하위 레벨:
public static void hideKeyboardFrom(Context context, View view) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
아래는 몇 가지 정보를 추가로 더 많은 시간을 허비하지 않아도 되므로) 에서 찾을 낭비됩니다 그 특징은 다음과 같습니다.
<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>
믿기 힘들 정도로 거의 아무 것도 하지 않는 것을 막기 위해 키보드, 터치 시 제어입니다 보인다 에서 열지 않을 경우 '포커스 = ", false",' 또는 ',' 할당되었는지 false" 포쿠사블린트루슈모데 = ", control). 언뜻 보면 이벤트 자동 초점 맞추는 이벤트를 할 뿐 아니라 윈드로소프트린푸스모데 설정값입니다 qic 의해 트리거되는 터치 이벤트.
따라서 '는' 스테일웨이시든 매우 빈약한 release. 랑하니. 아마도 '대신 이너이니시알포쿠스 합니다' 라고 불리기도 한다.
ᄋ "이번 도움이 됩니다.
두고 볼 수 없는 경우 (예를 들어, 방금 변경한 경우 발생할 수 있습니다) 성십자가는 다른 뷰를 제공할 경우 유용하게 사용할 수 있는 창이 토큰인지.
이들은 위의 코드는 "만약 (보기 = null) = new 보기 보기 위한 대안 (활동), 't # 39 이 don& 명시적으로 데이터베이스에구성원을 활동까지입니다.) 는 다음과 같은 뜻이 있다.
Δ1 조각은 클래스:
view = getView().getRootView().getWindowToken();
주어진 부분 '조각' 으로 매개변수입니다:
view = fragment.getView().getRootView().getWindowToken();
내용을 시작으로 본문:
view = findViewById(android.R.id.content).getRootView().getWindowToken();
이 노선은 추가 끝까지 방법:
'비에w.클리어포쿠스' ();
I got one more 솔루션을 숨기십시오 키보드:
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
여기서 '의' 과 '0' 의 '패스' HIDE_IMPLICIT_ONLY 포지셔닝하십시오 쇼플라그 emc. 이든플라그 위치를 ''. 소프트 키보드 닫으십시오 것으로 밝혀졌다.
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(tabHost.getApplicationWindowToken(), 0);
}
}
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
//Hide:
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
//Show
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
이전 대답:
//Show soft-keyboard:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//hide keyboard :
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
여기에 대답을 don& t # 39 를 사용할 경우, 다른 모든 것과 같은 there& # 39 의 또 다른 방법은, 이를 직접 제어 방식이다.
'& # 39 에디트스트 관리하게 될 몇 가지 기능이 만들기' 의 속성:
public void setEditTextFocus(boolean isFocused) {
searchEditText.setCursorVisible(isFocused);
searchEditText.setFocusable(isFocused);
searchEditText.setFocusableInTouchMode(isFocused);
if (isFocused) {
searchEditText.requestFocus();
}
}
그런 다음 '의' you open / 키보드 닫으십시오 에디트스트 롱포쿠스 있는지 확인합니다.
searchEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (v == searchEditText) {
if (hasFocus) {
// Open keyboard
((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(searchEditText, InputMethodManager.SHOW_FORCED);
} else {
// Close keyboard
((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
}
}
}
});
이제 키보드 여시겠다고요 때마다 직접 전화:
setEditTextFocus(true);
닫기와 및 문의:
setEditTextFocus(false);
사우라바 파레크 는 최고의 오토메이티드 부진했다.
오늘은 올바른 플래그를 사용하여, 어쨌든요
/* hide keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
/* show keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
실제 사용 예
/* click button */
public void onClick(View view) {
/* hide keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
/* start loader to check parameters ... */
}
/* loader finished */
public void onLoadFinished(Loader<Object> loader, Object data) {
/* parameters not valid ... */
/* show keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
/* parameters valid ... */
}
그래서, 나는 여기서 가져다줄래요 검색: 에서 사용할 수 있는 해답을 찾을 수
// Show soft-keyboard:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
// Hide soft-keyboard:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
짧은 대답 # # '온 클릭' 의 '에' 리스너에 security. '론디토레스티온 에디트스트 IME_ACTION_DONE' 을 (를) ''
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
someEditText.onEditorAction(EditorInfo.IME_ACTION_DONE)
}
});
내가 느끼는 이 방법은 보다 더 정렬되고 Android& # 39 의 디자인 패턴. 이 예는 you& # 39 위 (일반적으로 대부분의 일반적인 건), '보통' ll 가지고 있는 중심으로 한 것은 또 호출하십시오 에디트스트 인도하심이라만일 / 키보드 제일 (이는 일반적인 예는 그 수 많은 말해둘꼐요 호출하십시오). , 한다는 점에서 이 같은 방식으로 키보드, 보통 한 릴리스에는 수행할 수 있는 '에서' 이메이비션. 그냥 '을 (를)', ',' 알 = " actiondone" 안드로이드 아메오티언스 에디트스트 한 동작을 통해 얻고자 할 때, 같은 비헤이비어를 같은 것이다.
이 노력해야 합니다.
public class KeyBoard {
public static void show(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); // show
}
public static void hide(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // hide
}
public static void toggle(Activity activity){
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (imm.isActive()){
hide(activity);
} else {
show(activity);
}
}
}
KeyBoard.toggle(activity);
'에서 v3.2.4_r1 세초프티노푸트쇼농포쿠스 (부울입니다 show)' 는 추가되도록 제어입니다 날씨 방관하겠나 표시하십시오 테스트비에프 초점을 맞출 때, 그러나 그 때 키보드 여전히 숨겨짐 그러하매 반사 사용해야 합니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
try {
Method method = TextView.class.getMethod("setSoftInputShownOnFocus", boolean.class);
method.invoke(mEditText, false);
} catch (Exception e) {
// Fallback to the second method
}
}
기존 버전에 대해 내가 아주 좋은 결과를 얻을 수 있는 ' (단, 멀리 완벽한)', 'a' from my 루트로부터의 비에프트리오 세르베르 봉로브라유트리스트너 추가되든지 협조를 받아 보고 있는지 확인하는 단순화표현 키보드 표시됨을 다음과 같습니다.
@Override
public void onGlobalLayout() {
Configuration config = getResources().getConfiguration();
// Dont allow the default keyboard to show up
if (config.keyboardHidden != Configuration.KEYBOARDHIDDEN_YES) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mRootView.getWindowToken(), 0);
}
}
이 두 번째 및 마지막 해결책에 대한 핸들을 통해 선택물을 혼잡 분할합니다 키보드 나타날 수 있습니다.
android:imeOptions="actionNone|actionUnspecified|flagNoFullscreen|flagNoExtractUi"
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
[1]: https://developer.android.com/reference/android/widget/TextView.html # setImeOptions% 28int% 29
public void setKeyboardVisibility(boolean show) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(show){
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}else{
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0);
}
}
나는 정신없이 일하고 있고, 모든 솔루션을 통해 2 일 이상 어떤 식으로든 다른 스레드에서 올린 찾은 부족하다. 내 정확한 사항은 신뢰성입니다 투명지에 버튼를 100% 를 화면에 표시하거나 숨길 수 있는 방식이다. 키보드를 사용할 때 그 숨겨진 상태는 다시 표시 안 입력 필드를 관계없이 사용자가 클릭하는. 이 경우 사용자가 클릭 버튼이 사라지는 가시적입니다 스테이드 키보드를 아무리 안 된다. All the way up 이 작업을 하는 2.2+ 안드로이드 최신 디바이스입니다.
알 수 있듯이 이 apc® 구축현 내 애플리케이션 [청소하십시오 RPN] (https://play.google.com/store/apps/details? id = au.com.lukesleeman.rpn&, hl = en).
테스트 후에 많은 제안됩니다 대한 답을 다양한 안드로이드 앱 안정적으로 확연히 알 수 있다 (froyo 및 진저브레드 장치 등) 이 되었다.
나를 위해 일시적으로 숨어 키보드 부족하다. 또 다시 표시 장치를 대로 따라 새로운 텍스트 필드 무게를 두고 있다. 내 앱 사용하는 등 여러 텍스트 필드 중심으로 한 페이지에 숨겨짐 키보드 아이돌 다시 새로운 텍스트 필드 원인이 된다.
외람되나 품목으로부터 신뢰성입니다 활동이 시작되는 때 목록 2 와 3 에서 사용할 수 있습니다. 일단 활동에 delaymins 있겠느 숨기거나 키보드 보이게 됩니다. 실제로 이 버튼을 누르면 키보드가 전환하십시오 재시작하여 활동을 하는 것이 요령. 내 app 의 키보드 버튼을 누르면 다음과 같은 코드를 전환하십시오 런입니다:
private void toggleKeyboard(){
if(keypadPager.getVisibility() == View.VISIBLE){
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Bundle state = new Bundle();
onSaveInstanceState(state);
state.putBoolean(SHOW_KEYBOARD, true);
i.putExtras(state);
startActivity(i);
}
else{
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Bundle state = new Bundle();
onSaveInstanceState(state);
state.putBoolean(SHOW_KEYBOARD, false);
i.putExtras(state);
startActivity(i);
}
}
이로 인해 현재 작업, 그리고 번들화 붙여넣습니다 구했잖아 상태로 할 활동이 시작될 경우 또는 숨길지 반군지역 부울을 통해 나타내는 키보드 표시됩니다.
다음의 코드는 내부 언크리치 메서드로부터 실행하십시오:
if(bundle.getBoolean(SHOW_KEYBOARD)){
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(newEquationText,0);
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
else{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
이 경우, 그 다음에 리즈한테 소프트 키보드 표시됩니다 린퍼트메서드먼거 표시하십시오 키보드와 창은 항상 부드러운 입력입니다 할 수 있는 것을 볼 수 있습니다. 소프트 키보드 감춰집니다 할 경우 다음 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM 설정되었습니다.
나는 이 모든 디바이스에서 외곽진입 안정적으로 작동합니다 - 4 년 된 HTC 의 안드로이드 2.2 를 거친 전화_번호 최대 넥서스 7 호스팅하면서 4.2.2. 이 방식은 불이익을 받을 수 있는 유일한 비 케어플 위드 취급료 back 버튼을 합니다. 내가 할 수 있다 (해당 a 계산기에는) 한 화면 내 앱 본질적으로 대뿐입니다 옹박프레스트 오버라이드합니다 () 와 홈 화면 디바이스에는 돌아갑니다.
이 주변의 모든 솔루션 로 하고 싶은 경우, 또는 소프트 키보드 닫으십시오 않고도 어디서부터든 대한 참조입니다 (에디트스트) 현장 데 사용된 경우 현장 중심의 열어보려면 키보드, 그래도 그들이성년에 이를 사용할 수 있습니다 () 의 활동은) 이 되었다.
if (getCurrentFocus() != null) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
덕분에 이렇게 답변, 난 다음, 이 때, 내 경우에는 파생됨 있는 한 조각 작품을 통해 아주 잘 스크롤하지 비에우파거.
private void hideKeyboard() {
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
private void showKeyboard() {
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
}
사용할 수 있지만, s # 39 위에 다른 답을 scenario& 스케쳐내 키보드 및 적절한 컨텍스트로 this: 시도하시겠습니까 애쓰고 δ1 보기입니다 숨김니다.
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
hideSoftKeyBoardOnTabClicked(v);
}
}
private void hideSoftKeyBoardOnTabClicked(View v) {
if (v != null && context != null) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
그리고 그것으로 부터 페치할 컨텍스트로 내려받습니다 구성자를)
public View/RelativeLayout/so and so (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
소프트 키보드 장치 또는 기능 테스트 동안 닫을지 경우, " 클릭하여 뒤로를 button", 그렇게 할 수 있습니다. 에서 테스트:
// Close the soft keyboard from a Test
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
I put " 뒤로를 button"; # 39 위, 이후 따옴표로 doesn&, t () '에서 활동을 위한' 옹박프레스트 트리거하여 질문이예요 그냥 키보드 닫습니다.
잠시 동안, 걸리는 만큼 일시정지하려면 smartupdate 이동하기 전에 잠시 뒤로 버튼을 클릭할 수 있으므로, 뷰 등, 이후의 닫으십시오 won& # 39, t be 레지스터링 보살피되 잠시 후에 (1 번째는 충분히 ime).