Yatay yumuşak klavye girişi için tam ekran düzenleme görünümünü devre dışı mı bırakıyorsunuz?


237

Yazılım klavyeleri kullanan Android cihazlarda, manzara modundayken tam ekran klavye düzenleme görünümünün (aşağıda gösterilmiştir) görünmesini engellemek istiyorum (yani yalnızca yazılım klavyesinin kendisini ve arkasındaki görünümümü görmek istiyorum).

Bu setExtractViewShown(false)yöntem kullanılarak elde edilebilir varsayalım InputMethodService, ancak bunun varsayılan örneğine erişemiyorum ve özel bir giriş yöntemi uygulamak istemiyorum.

Android tam ekran düzenleme görünümü

Eklemek için düzenlendi: girdinin gittiği görünüm bir değil TextView( Viewözel bir InputConnectionuygulamayla bir), bu yüzden android:imeOptions="flagNoExtractUi"burada çalışmaz.


Görmeye çalışalım. Bu senin için iyi. [Şuna bir bakın] [1] [1]: stackoverflow.com/questions/8648401/…
sonida

benzer bir sorunum var :( herhangi bir fikriniz olabilir mi? stackoverflow.com/questions/36914290/…
railwanderer

2
bunu tüm uygulama boyunca nasıl uygulayacağız. xml'deki her düzenleme metninde özellik değerini eklemeyeceğiz.
Vikas Pandey

2
Aşağıdaki yanıtların birçoğu flagNoExtractUiveya öğesini kullanmanızı önerir IME_FLAG_NO_EXTRACT_UI. Ancak, IME_FLAG_NO_EXTRACT_UIbuna karşılık gelen belgelerde , flagNoExtractUi"Bu bayrağın kullanılması önerilmez ve gelecekte kullanımdan kaldırılabilir" flagNoFullscreenifadesi de önerilir.
ThomasW

Yanıtlar:


178

Ben nihayet benim kendi soruya cevap:

Çıkarma UI'si (yani tam ekran düzenleme modu) giriş bağlantısının bağlandığı noktada devre dışı bırakılabilir:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

215
sadece xml dosyasına android koymak: imeOptions = "flagNoExtractUi"

1
jnic, yumuşak klavye kodunda bu geçersiz kılma işlemini nerede yaptınız? SoftKeyboard.java? Aynı geçersiz kılmayı denedim ve hata çıktı.

14
Muhtemelen şu şekilde hangi seçeneklerin aktarıldığını geçersiz kılmak yerine seçeneklere bayrak eklemek isteyeceksiniz:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
ObsidianX

2
@ user726518 bu özelliği işlem çubuğundaki arama kutusu öğesine nasıl uygulayabilirim?
Menna-Allah Sami

1
Klavyeyi işlemek için özel Görünüm kullanılırken işe yarayan tek şey. Teşekkürler!
Herman

109

Bunu yapmak için xml etkinliğine gidin ve android:imeOptions="flagNoExtractUi"kodunuzu yapıştırın . Ama nereye yapıştırılmalıdır? Örnek etkinlik xml koduna ve EditText'e bakın:

<?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>

Klavye için daha fazla özelleştirme seçeneği istiyorsanız, bkz. Http://developer.android.com/guide/topics/ui/controls/text.html


64

özelliği eklemek android:imeOptions="flagNoExtractUi"her birine EditTextsizin de XMLdosyaya.


1
Bu cevap çok kısa ve SO kalite standartlarını karşılamıyor. Lütfen ek açıklamalar ekleyerek geliştirin, böylece yalnızca OP için değil, topluluk için de yararlı olacaktır.
Lorenzo Donati - Codidact.org

31
@LorenzoDonati tam olarak yapmanız gereken şey ... bu çok basit bir cevap çünkü çözüm çok basit ve bunu yukarıdaki cevaplardan farklı bir şekilde yapıyor. Ayrıca, IMO sorusunu cevaplamadıkça cevaplar "çok kısa" olamaz.
Michael Yaworski

1
Üzgünüz, ama SO topluluğunun bu konuda düşündüğü şey bu değil. Cevaplar OP'nin problemini çözmek için sınırlandırılmamalı, genel olarak harika cevaplar olmalıdır. Örneğin buna ve buna bakın .
Lorenzo Donati - Codidact.org

22
@LorenzoDonati sadece tek bir sonuç ile çok özel bir sorudur (ancak bunu çözmek için birden fazla yol). Cevabım bu sayfadaki diğer cevaplara bir ektir. Bu sayfadaki TÜM yanıtlar yalnızca "OP'nin sorunu" ile sınırlıdır, çünkü yazılabilecek tek cevap budur. Dediğim gibi, özel ve basit.
Michael Yaworski

2
Sonunda cevabı buldum. mike yaworski
Drx

53

Yukarıdaki yanıt, dinamik olarak eklenen EditTexts için çözümü bulmama yardımcı oldu:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

37

android:imeOptions="flagNoFullscreen"Bu özelliğe ulaşmak için kullanın .


1
xml yazmak için güzel ve daha iyi bir yaklaşım. Benim için çalışıyor. Teşekkürler
Ahesanali Suthar

1
Buna IME_FLAG_NO_EXTRACT_UIkarşılık gelen belgelerde , flagNoExtractUi"Bu bayrağı kullanmanın cesaretinin kırıldığını ve gelecekte kullanımdan kaldırılabileceğini" belirttiğini, flagNoFullscreenönerilen seçeneğin de olduğunu unutmayın.
ThomasW

12

Ayrıca, birden çok imeOptions programsal olarak birleştirmek istiyorsanız, | sözdizimi.

Örneğin, manzarada tam ekran düzenleme görünümünü devre dışı bırakmak ve "İleri" tuşunu klavyede "Tamam" (ACTION_DONE) ile değiştirmek için şunları kullanabilirsiniz:

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

9

IME'yi doğrudan değiştiriyorsanız, geçersiz kılınarak bir ExtractedView görüntülemesini engelleyebilirsiniz onUpdateExtractingVisibility:

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

6

Ben biraz geç olduğunu biliyorum ama yine de ilgi herkes için, işte benim çözümdür: Benim durumumda Ben bir manzara vardı Aktivite bir içeren EditText bunun üstündeki ve bu arama otomatik tamamlama özelliği uygulamak için gereken Aktivite , hangi üst üste binmesine klavye kullanıcının RecyclerView sonucunu görememesine neden oldu . Böylece düzenimde bu EditText sahip bitti :

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

Şerefe!


5

Çözümüm:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

Bu daha güncel bir cevaptır.
alierdogan7

2

Kullanabilirsiniz :

android:imeOptions="flagNoFullscreen" 

düzenleme metninizde


1
Bu bir cevap mı?
artgb

Deniyorum ve benim için çalışıyor! (Cihazım android 4.1.2)
Thientvse

0

Yumuşak klavyeyi gizlemek ve odağı arama görünümünden temizlemek için arayabilirsiniz.

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

super.clearFocus();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.