परिदृश्य में सॉफ्ट कीबोर्ड इनपुट के लिए फुलस्क्रीन संपादन दृश्य अक्षम करना?


237

सॉफ्ट कीबोर्ड का उपयोग करने वाले एंड्रॉइड डिवाइसों पर, मैं फुलस्क्रीन कीबोर्ड एडिटिंग व्यू (नीचे दिखाए गए) को लैंडस्केप मोड में दिखने से रोकना चाहता हूं (यानी मैं केवल सॉफ्ट कीबोर्ड ही देखना चाहता हूं और इसके पीछे मेरा नजरिया)।

मुझे लगता है कि इस setExtractViewShown(false)पद्धति का उपयोग करके प्राप्त किया जा सकता है InputMethodService, लेकिन मैं इस के डिफ़ॉल्ट उदाहरण तक पहुंचने में असमर्थ हूं और एक कस्टम इनपुट पद्धति को लागू नहीं करना चाहता।

Android फुलस्क्रीन संपादन दृश्य

जोड़ने के लिए संपादित: यह देखने के लिए कि कौन सा इनपुट जा रहा है, यह एक TextView(यह Viewएक कस्टम InputConnectionकार्यान्वयन के साथ) नहीं है, इसलिए android:imeOptions="flagNoExtractUi"यहां काम नहीं करेगा।


इसे देखने की कोशिश करते हैं। यह आपके लिये अच्छा हॆ। [इसे देखें] [१] [१]: stackoverflow.com/questions/8648401/…
sonida

मेरे पास एक समान समस्या है :( आपको कोई भी विचार हो सकता है? stackoverflow.com/questions/36914290/…
railwanderer

2
इसे पूरे ऐप में कैसे लागू किया जाए। हम xml में हर एडिटटेक्स्ट में विशेषता-मूल्य जोड़ने वाले नहीं हैं।
विकास पांडेय

2
नीचे दिए गए कई उत्तर उपयोग करने की सलाह देते हैं flagNoExtractUiया IME_FLAG_NO_EXTRACT_UI। हालाँकि, दस्तावेज़ीकरण में IME_FLAG_NO_EXTRACT_UI, जो से मेल खाती है flagNoExtractUi, यह बताता है कि "इस ध्वज का उपयोग करने से हतोत्साहित किया जाता है और यह भविष्य में पदावनत हो सकता है", इसलिए flagNoFullscreenअनुशंसित विकल्प है।
थॉमस डब्ल्यूए

जवाबों:


178

मैंने आखिरकार अपने सवाल का जवाब दिया:

एक्स्ट्रेक्ट यूआई (यानी फुलस्क्रीन एडिटिंग मोड) को उस बिंदु पर निष्क्रिय किया जा सकता है जिस पर इनपुट कनेक्शन हुक किया गया है:

@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 एक्शन बार में सर्चबॉक्स आइटम पर इस विशेषता को कैसे लागू करें?
मन्ना-अल्लाह सामी

1
कीबोर्ड को संभालने के लिए कस्टम व्यू का उपयोग करते समय केवल एक चीज काम करती है। धन्यवाद!
हरमन २

109

ऐसा करने के लिए, android:imeOptions="flagNoExtractUi"अपने कोड में गतिविधि xml और पेस्ट पर नेविगेट करें। लेकिन इसे कहाँ चिपकाया जाना चाहिए? उदाहरण गतिविधि 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@tein.html देखें


64

अपनी फ़ाइल में android:imeOptions="flagNoExtractUi"प्रत्येक EditTextमें संपत्ति जोड़ें XML


1
यह उत्तर बहुत छोटा है और SO गुणवत्ता मानकों को पूरा नहीं करता है। कृपया कुछ अतिरिक्त स्पष्टीकरण जोड़कर इसमें सुधार करें, ताकि यह समुदाय के लिए उपयोगी हो और न केवल ओपी के लिए।
लोरेंजो डोनाटी - कोडिडैक्ट.ओआर

31
@LorenzoDonati यह वही है जो आपको करना है ... यह एक बहुत ही सरल उत्तर है क्योंकि समाधान बहुत सरल है और यह ऊपर दिए गए उत्तरों की तुलना में इसे करने का एक अलग तरीका है। जब तक कि वे प्रश्न का उत्तर नहीं देते, तब तक, उत्तर "बहुत छोटा" नहीं हो सकता।
माइकल यावोरस्की

1
क्षमा करें, लेकिन ऐसा नहीं है कि SO समुदाय इसके बारे में क्या सोचता है। ओपी की समस्या को हल करने के लिए जवाब सीमित नहीं होने चाहिए, वे सामान्य रूप से महान जवाब होने चाहिए। उदाहरण के लिए यह और यह देखें ।
लोरेंजो डोनाटी - कोडिडैक्ट.ओआर

22
@ लोरेंजो डोनोति यह केवल एक अंतिम परिणाम (लेकिन इसे हल करने के कई तरीके) के साथ एक बहुत ही विशिष्ट प्रश्न है। मेरा उत्तर इस पृष्ठ पर अन्य उत्तरों के अतिरिक्त है। इस पृष्ठ के सभी उत्तर केवल "ओपी की समस्या" तक ही सीमित हैं क्योंकि यह एकमात्र प्रकार का उत्तर है जिसे लिखा जा सकता है। जैसा मैंने कहा, यह विशिष्ट और सरल है।
माइकल यावोरस्की

2
आखिरकार, मुझे जवाब मिल गया। बहुत बहुत धन्यवाद @mike yaworski
Drx

53

ऊपर दिए गए जवाब से मुझे डायनामिकली एडिट किए गए एडिटेक्स के समाधान का पता लगाने में मदद मिली:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

37

android:imeOptions="flagNoFullscreen"उस सुविधा को प्राप्त करने के लिए उपयोग करें ।


1
xml में लिखने के लिए अच्छा और बेहतर तरीका। मेरे लिये कार्य करता है। धन्यवाद
Ahesanali सुथार

1
ध्यान दें कि प्रलेखन के लिए IME_FLAG_NO_EXTRACT_UI, जो से मेल खाती है flagNoExtractUi, यह बताता है कि "इस ध्वज का उपयोग करने से हतोत्साहित किया जाता है और यह भविष्य में पदावनत हो सकता है", इसलिए flagNoFullscreenअनुशंसित विकल्प है।
थॉमसडब्ल्यू

12

इसके अलावा, यदि आप कई imeOptions programaticaly को संयोजित करना चाहते हैं, तो आप उपयोग कर सकते हैं | वाक्य - विन्यास।

उदाहरण के लिए, लैंडस्केप में फुलस्क्रीन एडिट व्यू को डिसेबल करने के लिए और कीबोर्ड में "नेक्स्ट" (ACTION_DONE) द्वारा "नेक्स्ट" की जगह, आप उपयोग कर सकते हैं:

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

9

यदि आप सीधे IME को संशोधित कर रहे हैं, तो आप इसे ओवरराइड करके कभी भी एक्सट्रैक्टेड दृश्य प्रदर्शित करने से रोक सकते हैं onUpdateExtractingVisibility:

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

6

मुझे पता है कि यह थोड़ी देर से है, लेकिन जो अभी भी दिलचस्पी रखता है, उसके लिए यहां मेरा समाधान है: मेरे मामले में मेरे पास एक लैंडस्केप एक्टिविटी थी, जिसमें सबसे ऊपर एक EditText था और मुझे इस खोज गतिविधि में स्वत: पूर्ण सुविधा को लागू करने की आवश्यकता थी , जो अतिव्यापी है कीबोर्ड ने एक समस्या का कारण बना दिया कि उपयोगकर्ता 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
क्या यह एक जवाब है?
आर्टबैग

मैं यह कोशिश करता हूं और यह मेरे लिए काम करता है! (मेरा डिवाइस एंड्रॉइड 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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.