java 클래스에서 android : windowSoftInputMode 값을 변경하는 방법이 있습니까?


82

windowSoftInputMode각 탭에 대해 다른 속성 을 갖도록 탭을 작동하고 싶습니다 . 탭의 모든 처리가 하나의 단일 활동에서 수행 될 때 Java 클래스에서이 속성에 액세스하는 방법은 무엇입니까?

Java 코드에서이 매니페스트 속성에 액세스하는 방법이 있습니까?

답변:


124

활동에 대한 softInputMode를 변경하려면 다음을 사용하십시오.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

다음을 사용하여 EditText의 softInput 유형을 변경하십시오.

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

수정을 위해 @Eliezer에게 감사드립니다.


20
같은 속성에 액세스하려면이 setSoftInputMode 방법 주셔서 감사합니다 ... 정말 ... 추가 정보 나 도움이 adjustPan하고 adjustResize당신은 갈 수 WindowManager.LayoutParams당신이 사용할 수있는 많은 유용한 상수 찾을 수 있습니다, 수업 setSoftInputMode방법
Prasham

7
@SureshBora 내가 66CLSjY 응답 및 @aman @ 결합 드디어이 있어요 : getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);나는 이미 그것을 테스트, 정말 작동
움베르토 카스타네다

1
이것이 어떻게 정답입니까? 당 developer.android.com/reference/android/view/... 유일한 가능한 값은 통과 Window#setSoftInputMode되어WindowManager.LayoutParams.SOFT_INPUT_*
엘리

4
@ 66CLSjY 그것은 나를 위해 작동하지 않습니다. 내가 뭘 놓치고 있는지 말해 줄 수있어? 나는 이것을 액티비티 내부라고 부른다. getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);하지만 키보드는 여전히 다른 뷰 위에있는 내 FrameLayout을 밀어 붙인다. 그러나 다른 견해가 그대로 남아 있습니다. 매니페스트에 추가하면 작동하지만 전체 활동에 적용하고 싶지 않습니다.
Tamás Kozmér

1
onCreate ()에서 setContentView 전에 setSoftInputMode를 호출 했습니까?
AjOnFire

36

Prasham의 의견 에 따르면 나는 이것을했고 그 덕분에 내 생명을 구했습니다! EditTextSoftWindowInput당신이 가진 레이아웃이있을 때 모드는 매우 버그가 ScrollView당신은 동적으로 작성된다.

이 게시물을 읽었지만 Prashan의 답변과 같은 다른 답변 / 댓글을 계속 읽었으므로 새 게시물에 작성하기로 결정했습니다.

내가 사용한 코드 아래 ScrollView:

Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

7
안녕 아만, 여기에서 답을 읽는 것이 조금 어렵습니다. Prashan에게 매우 감사하다는 것을 알 수 있습니다.하지만 개인적인 의견 중 일부를 지우고이 코드가 해결하는 데 도움이 될 사항을 설명해 주시겠습니까? 감사.
타린 이스트

1
흠, 적어도 팬을 조정하도록 설정하려면 작동하지 않습니다. 매니페스트에 넣어야 작동합니다.
Ixx

이로 인해 응용 프로그램이 충돌합니다.
Farrakh 자 베드

10

탭에 두 가지 모드를 사용하는 것을 목표로합니다. 모드는 SOFT_INPUT_ADJUST_RESIZESOFT_INPUT_ADJUST_NOTHING입니다.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

위의 코드 줄은 그 자체로는 작동하지 않습니다. 앱은 항상 상태에서 작동합니다 ADJUST_NOTHING. 단, AndroidManifest.xml 파일의 태그에를 windowSoftInputMode="adjustResize"삽입하면 <activity>기본적으로 앱 창의 크기가 조정됩니다. 또한 다음 전화를 걸 때

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

예상대로 작동하고 크기가 조정되지 않습니다.

답변에 대한 PS 개선


1
프로그래밍 방식으로 아무것도 돌아 가지 않으면 크기 조정이 변경되지 않습니다.
Taranmeet Singh 2016

1
이것은 정말 좋은 관찰입니다. 기본적으로 windowSoftInputMode="adjustResize"매니페스트에서 설정 하면 나중에이 플래그를 처리하는 데 도움이됩니다. 특히 단일 활동에 대부분 조각이있는 시나리오에서. 따라서 프로그래밍 방식으로 SOFT_INPUT_ADJUST_RESIZE 다시 SOFT_INPUT_ADJUST_NOTHING 주문형으로 전환하여 활동의 입력 상태를 동적으로 계속 변경할 수 있습니다 . 잘 했어!
sud007

0

프로그래밍 방식으로 다음 코드를 사용할 수 있습니다.

android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

감사합니다 Deepak


0

Xamarin Android에서는 다음과 같이 프로그래밍 방식으로 수행 할 수 있습니다.

 protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.DetailDesign);
             Window.SetSoftInputMode(SoftInput.AdjustPan);
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.