가로로 소프트 키보드 입력을위한 전체 화면 편집보기를 비활성화 하시겠습니까?


237

소프트 키보드를 사용하는 Android 기기에서는 가로 모드 일 때 전체 화면 키보드 편집보기 (아래 그림 참조)가 표시되지 않도록하고 싶습니다 (즉, 소프트 키보드 자체와 그 뒤에있는보기 만보고 싶습니다).

setExtractViewShown(false)on 메소드를 사용 하여이 작업을 수행 할 수 있다고 가정 InputMethodService하지만 기본 인스턴스에 액세스 할 수 없으며 사용자 정의 입력 메소드를 구현하고 싶지 않습니다.

Android 전체 화면 편집보기

추가 편집 : 입력이 진행되는보기가 TextView( View사용자 정의 InputConnection구현이 아님) android:imeOptions="flagNoExtractUi"이 아니므로 여기서 작동하지 않습니다.


그것을 보자. 당신에게 좋습니다. [이것을보세요] [1] [1] : stackoverflow.com/questions/8648401/…
sonida

나는 비슷한 문제가 있습니다 : (당신은 어떤 아이디어가있을 수 있습니까? stackoverflow.com/questions/36914290/…
railwanderer

2
xml의 ​​모든 편집 텍스트에 attribute-value를 추가하지는 않을 것입니다.
Vikas Pandey

2
아래의 많은 답변은 flagNoExtractUi또는을 사용하는 것이 좋습니다 IME_FLAG_NO_EXTRACT_UI. 그러나에 IME_FLAG_NO_EXTRACT_UI해당하는 에 대한 설명서에서 flagNoExtractUi"이 플래그를 사용하지 않는 flagNoFullscreen것이 좋으며 향후 더 이상 사용되지 않을 수 있습니다"라고 권장되는 옵션입니다.
ThomasW

답변:


178

나는 마침내 내 자신의 질문에 대답했다.

입력 UI가 연결된 지점에서 추출 UI (즉, 전체 화면 편집 모드)를 비활성화 할 수 있습니다.

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

215
그냥 당신의 XML 파일에 넣습니다 android : imeOptions = "flagNoExtractUi"

1
jnic, 소프트 키보드 코드에서 대체를 어디에서 했습니까? SoftKeyboard.java? 동일한 재정의를 시도하고 오류가 발생했습니다.

14
다음과 같이 전달 된 옵션을 재정의하는 대신 옵션에 플래그를 추가 할 수 있습니다.outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
ObsidianX

2
@ user726518 작업 표시 줄의 검색 창 항목에이 속성을 적용하는 방법은 무엇입니까?
Menna-Allah Sami

1
사용자 정의보기를 사용하여 키보드를 처리 할 때 유일한 효과가있었습니다. 감사!
허먼

109

그렇게하려면 활동 xml로 이동 android:imeOptions="flagNoExtractUi"하여 코드를 붙여 넣으 십시오. 그러나 어디에 붙여 넣어야합니까? 예제 활동 xml의 코드를보고 EditText를 살펴보십시오.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"         
    >

    <EditText
        android:imeOptions="flagNoExtractUi"
        android:id="@+id/etTextInAct"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >   
        <requestFocus />
    </EditText>

</LinearLayout>

키보드에 대한 추가 사용자 정의 옵션을 원하면 http://developer.android.com/guide/topics/ui/controls/text.html을 참조 하십시오.


64

부동산 추가 android:imeOptions="flagNoExtractUi"각을 EditText당신의 XML파일.


1
이 답변은 너무 짧으며 SO 품질 표준을 충족하지 않습니다. 추가 설명을 추가하여 개선하면 OP뿐만 아니라 커뮤니티에도 유용합니다.
Lorenzo Donati-Codidact.org

31
@LorenzoDonati 그것은 당신이해야 할 일입니다 ... 솔루션은 매우 간단하고 위의 답변과는 다른 방식이기 때문에 매우 간단한 대답입니다. 또한 IMO라는 질문에 대답하지 않으면 답변이 "너무 짧습니다".
Michael Yaworski

1
죄송하지만 SO 커뮤니티에서는 이에 대해 생각하지 않습니다. 답변은 OP의 문제를 해결하기 위해 제한되어서는 안되며 일반적으로 큰 답변이어야합니다. 예를 들어 thisthis를 참조하십시오 .
Lorenzo Donati-Codidact.org

22
@LorenzoDonati 그것은 단 하나의 최종 결과 (그러나 그것을 해결하는 여러 가지 방법) 가있는 매우 구체적인 질문입니다. 내 답변은이 페이지의 다른 답변에 추가 된 것입니다. 이 페이지의 모든 답변은 "OP 문제"로만 제한됩니다. 답변은 작성할 수있는 유일한 종류이기 때문입니다. 내가 말했듯이, 구체적이고 간단합니다.
Michael Yaworski

2
마지막으로 답을 찾았습니다. 정말 감사합니다 @mike yaworski
Drx

53

위의 답변은 동적으로 추가 된 EditTexts에 대한 솔루션을 찾는 데 도움이되었습니다.

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

37

android:imeOptions="flagNoFullscreen"해당 기능을 달성하는 데 사용하십시오 .


1
XML로 작성하는 훌륭하고 더 나은 방법. 나를 위해 작동합니다. 감사합니다
Ahesanali Suthar

1
설명서에 있습니다 IME_FLAG_NO_EXTRACT_UI에 해당 flagNoExtractUi, 그것은 "권장하지 않습니다이 플래그를 사용하고 미래에 사용되지 않는이 될 수있다"고 주장한다, 그래서 flagNoFullscreen옵션을 사용하는 것이 좋습니다.
ThomasW

12

또한 여러 imeOptions를 프로그래밍 방식으로 결합하려면 | 통사론.

예를 들어 가로에서 전체 화면 편집보기를 비활성화하고 키보드에서 "Next"키를 "OK"(ACTION_DONE)로 바꾸려면 다음을 사용할 수 있습니다.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);

9

IME를 직접 수정하는 경우 다음을 재정 의하여 IME가 ExtractedView를 표시하지 않도록 할 수 있습니다 onUpdateExtractingVisibility.

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}

6

나는 늦게 조금 알고 있지만, 여전히 관심이 누군가를 위해, 여기 내 솔루션입니다 : 내 경우에는 내가 풍경이 있었다 활동 포함 글고을 그것의 상단을 나는이 검색에 자동 완성 기능을 구현하는 데 필요한 활동 , 이는 중복을 키보드로 인해 사용자가 RecyclerView의 결과를 볼 수없는 문제가 발생했습니다 . 그래서 레이아웃 에이 EditText가 생겼 습니다 .

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

건배!



2

당신이 사용할 수있는 :

android:imeOptions="flagNoFullscreen" 

편집 텍스트에서


1
이것이 답변입니까?
artgb

나는 그것을 시도하고 나를 위해 일한다! (내 장치는 안드로이드 4.1.2입니다)
Thientvse

0

소프트 키보드를 숨기고 검색보기에서 포커스를 지우려면 전화를 걸 수 있습니다.

public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.