Android में गतिविधि स्टार्टअप पर ध्यान केंद्रित करने से EditText को कैसे रोकें


2871

मेरे पास ActivityAndroid में दो तत्व हैं:

  1. EditText
  2. ListView

जब मेरी Activityशुरुआत होती है, तो EditTextतुरंत इनपुट फ़ोकस (चमकता कर्सर) होता है। मैं स्टार्टअप पर इनपुट फोकस करने के लिए कोई नियंत्रण नहीं चाहता हूं। मैंने कोशिश की:

EditText.setSelected(false);
EditText.setFocusable(false);

कोई भाग्य नहीं। शुरू EditTextहोने पर मैं खुद को नहीं चुनने के लिए कैसे मना सकता हूं Activity?

जवाबों:


2591

लुक और मार्क से उत्कृष्ट जवाब हालांकि एक अच्छा कोड नमूना गायब है। निम्नलिखित उदाहरण की तरह टैग android:focusableInTouchMode="true"और android:focusable="true"पैरेंट लेआउट (जैसे LinearLayoutया ConstraintLayout) जोड़ना समस्या को ठीक करेगा।

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext" 
    android:nextFocusLeft="@id/autotext"/>

711
माता-पिता के लेआउट को स्थापित करने के बारे में क्या android:focusableInTouchMode="true"!
मुहम्मद बाबर

28
उत्तम! धन्यवाद ... एक बात ध्यान देने योग्य है कि डमी आइटम को ध्यान देने योग्य तत्व से अलग होना चाहिए! मेरे पास मेरी डमी और एडिट टेक्स्ट के बीच एक टेक्स्ट व्यू था और यह विधि काम नहीं करती थी!
मैडोब जूल

25
एंड्रॉइड सेट करना: focusableInTouchMode = "ट्रू" पैरेंट लेआउट के लिए अच्छा दृष्टिकोण था।
sujith s

7
महान कोड, ने मुझे बहुत मदद की :) इस पर सुधार करने की कोशिश करने के लिए, + कुछ और android:focusableInTouchMode="true"कवर किया android:focusable="true", इसलिए इस मामले android:focusable="true"में अनावश्यक है, और हटाया जा सकता है। इसके अतिरिक्त डमी दृश्य एक रैखिकलेयआउट के बजाय एक दृश्य हो सकता है। यह प्रसंस्करण शक्ति बचाता है + आपको कुछ चेतावनियों से बचाता है। इस प्रकार, मेरी सिफारिश डमी के दृश्य की जगह ले रही है<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
जैकब आर।

20
@PietroRea एंड्रॉइड में ऑटो-फोकस व्यवहारों को कष्टप्रद है जो इसके ऐप संरचना के मूल व्यवहार में बनाया गया है। यदि आप इसे बताते हैं कि एक संपादित पाठ रिलीज़ हो रहा है या फ़ोकस खो रहा है, तो यह स्वचालित रूप से निर्णय लेता है कि फ़ोकस कहाँ जाता है। ध्यान केंद्रित करने के लिए स्थानांतरित करने के लिए एक नई वस्तु के बिना, यह लेआउट में पहला ध्यान देने योग्य तत्व तब भी उठाता है जब वह तत्व वह होता है जो सिर्फ अपना ध्यान हटाता है! यह थोड़े पागल और निराश करने वाला है, लेकिन शायद इस प्रकार के व्यवहार का एक वैध कारण है।
वेस्टन वेडिंग

1674

क्या वास्तविक समस्या यह है कि आप इसे बिल्कुल नहीं चाहते हैं? या आप इसे फोकस करने के परिणामस्वरूप वर्चुअल कीबोर्ड दिखाना नहीं चाहते हैं EditText? मैं वास्तव में EditTextशुरू होने पर ध्यान केंद्रित करने के साथ एक समस्या नहीं देखता , लेकिन उपयोगकर्ता को स्पष्ट रूप से ध्यान केंद्रित करने EditText(और परिणामस्वरूप कीबोर्ड खोलने पर) का अनुरोध नहीं करने पर सॉफ्टइनपुट विंडो को खोलना निश्चित रूप से एक समस्या है ।

यदि यह वर्चुअल कीबोर्ड की समस्या है, तो AndroidManifest.xml <गतिविधि> तत्व प्रलेखन देखें।

android:windowSoftInputMode="stateHidden" - गतिविधि में प्रवेश करते समय हमेशा इसे छिपाएं।

या android:windowSoftInputMode="stateUnchanged"- इसे न बदलें (जैसे कि पहले से न दिखाए जाने पर इसे न दिखाएं , लेकिन अगर यह गतिविधि में प्रवेश करते समय खुला था, तो इसे खुला छोड़ दें)।


24
अभी भी कर्सर लेआउट में पहले EditText में है - भले ही कीबोर्ड नहीं दिखाया गया है
martyglaubitz

39
@ एंडरसन: उत्तर के बारे में कुछ भी नहीं निहित है कि यह EditTextध्यान केंद्रित करने से रोकता है । यह वास्तव में स्पष्ट रूप से बताता है कि यह है कि आप सॉफ्टवेयर कीबोर्ड IME को स्वचालित रूप से फोकस पर खोलने से कैसे रोकते हैं ; क्योंकि यह अधिक संभावना है कि बड़ी चिंता अप्रत्याशित रूप से पॉप अप करने वाला सॉफ्ट कीबोर्ड है, कि केवल फोकस पर। यदि आपका मुद्दा EditTextवास्तव में सभी पर ध्यान केंद्रित करने के साथ है , तो किसी और के उत्तर का उपयोग करें।
जो

1
इसे प्रोग्रामेटिक रूप से सेट करें: stackoverflow.com/questions/6138330/…
निक

3
एक कैमरे के साथ एक गतिविधि पर ऐसा मत करो - यह फ्लैश के समय को तोड़ता है (मुझसे मत पूछो क्यों)
डैनियल विल्सन

1
@ यह प्रश्न स्टार्टअप पर कीबोर्ड को छिपाने के बारे में नहीं है। इस तरह के सवाल यहां पूछे गए थे stackoverflow.com/questions/18977187/…
user924

1140

एक सरल समाधान मौजूद है। इन विशेषताओं को अपने मूल लेआउट में सेट करें:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true" >

और अब, जब गतिविधि शुरू होगी यह मुख्य लेआउट डिफ़ॉल्ट रूप से ध्यान केंद्रित करेगा।

इसके अलावा, हम रनटाइम पर बच्चे के विचारों से ध्यान हटा सकते हैं (जैसे, बाल संपादन समाप्त करने के बाद) फिर से मुख्य लेआउट पर ध्यान केंद्रित करके, जैसे:

findViewById(R.id.mainLayout).requestFocus();

गिलोय पेरोट से अच्छी टिप्पणी :

android:descendantFocusability="beforeDescendants"लगता है कि डिफ़ॉल्ट (पूर्णांक मान 0 है)। यह सिर्फ जोड़कर काम करता है android:focusableInTouchMode="true"

वास्तव में, हम देख सकते हैं कि beforeDescendantsसेट ViewGroup.initViewGroup()विधि में डिफ़ॉल्ट (Android 2.2.2) है। लेकिन 0 के बराबर नहीं।ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

गिलौम के लिए धन्यवाद।


1
इन विशेषताओं को दृश्य के प्रत्यक्ष माता-पिता के लिए सेट करना महत्वपूर्ण है जो गतिविधि निर्माण पर ध्यान केंद्रित करते हैं, अन्यथा यह काम नहीं करेगा।
टॉमहॉर्ज

4
बस एक सही समाधान। दोनों के लिए काम करता है: 1. ऑटोफोकस को सक्षम करना, और 2. सॉफ्ट कीबोर्ड को ऑटो-डिसेबल करना
मिलना

अच्छा लगा। इसे प्रत्यक्ष अभिभावक होने की आवश्यकता नहीं है। मैं इसे लेआउट के मूल स्तर पर सेट करता हूं और यह ठीक काम लगता है।
कुर्त्सुकी

@DanielWilson आप एक एडिटेक्स के सीधे माता-पिता के रूप में एक स्क्रॉलव्यू कब चाहते हैं?
मार्क बुइकेमा

आपको विंडो सॉफ्ट इनपुट जैसे रेडंड्रॉइड.वर्डप्रेस.com/
रेडी एंड्रायड

426

एकमात्र समाधान मैंने पाया है:

  • एक LinearLayout बनाएं (यदि लेआउट के अन्य प्रकार काम करेंगे तो मुझे पता है)
  • विशेषताएँ सेट करें android:focusable="true"औरandroid:focusableInTouchMode="true"

और EditTextगतिविधि शुरू करने के बाद फोकस नहीं मिलेगा


सरल!! मैंने शुरू में इन गुणों को मूल दृश्य में जोड़ा, जो विफल रहा, फिर मैंने इन्हें दूसरे लेआउट में सेट किया और ठीक काम किया। धन्यवाद!!
रिनो

यह एक ConstraintLayout के साथ भी काम करता है।
हॉकलाइ

85

समस्या एक ऐसी संपत्ति से आती है जिसे मैं केवल XML formलेआउट में देख सकता हूं ।

EditTextएक्सएमएल टैग के भीतर घोषणा के अंत में इस लाइन को निकालना सुनिश्चित करें :

<requestFocus />

इस तरह कुछ देना चाहिए:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>

77

अन्य पोस्टरों द्वारा दी गई जानकारी का उपयोग करते हुए, मैंने निम्नलिखित समाधान का उपयोग किया:

लेआउट में XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

onCreate () में

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

और अंत में, onResume () में

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}

73

इसके बजाय ClearFocus () आज़माएं setSelected(false)। Android के प्रत्येक दृश्य में फ़ोकसबिलिटी और चयनशीलता दोनों हैं, और मुझे लगता है कि आप फ़ोकस को साफ़ करना चाहते हैं।


यह आशाजनक लगता है, लेकिन गतिविधि जीवनचक्र के किस बिंदु पर इसे कहा जाना चाहिए? अगर मैं इसे onCreate () में कहता हूं, तो EditText पर अभी भी फोकस है। इसे onResume () या किसी अन्य स्थान पर बुलाया जाना चाहिए? धन्यवाद!
मार्क

8
मैंने इस उत्तर के साथ स्वीकृत उत्तर को जोड़ दिया। मैं कहा जाता है myEditText.clearFocus(); myDummyLinearLayout.requestFocus();में onResumeगतिविधि की। यह सुनिश्चित किया कि जब फोन घुमाया गया था तब EditText ध्यान नहीं रखता था।
तेयदेई

71

निम्न संपादन करने पर ध्यान केंद्रित करने से संपादन बंद कर देगा, लेकिन जब आप उन्हें स्पर्श करते हैं तो इसे पकड़ो।

<EditText
    android:id="@+id/et_bonus_custom"
    android:focusable="false" />

तो आप xml में झूठे पर ध्यान देने योग्य सेट करते हैं, लेकिन कुंजी जावा में है, जिसे आप निम्न श्रोता जोड़ते हैं:

etBonus.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        return false;
    }
});

क्योंकि आप झूठी वापसी कर रहे हैं, अर्थात घटना का उपभोग नहीं कर रहे हैं, ध्यान केंद्रित करने वाला व्यवहार सामान्य की तरह आगे बढ़ेगा।


6
लेकिन यह भविष्य में कभी भी ध्यान केंद्रित नहीं करेगा, केवल प्रारंभिक (गतिविधि प्रारंभ) के लिए केवल फोकस कैसे रोकें ??
जयेश

1
OnTouchListener को अन्य स्पर्श क्रियाओं से पहले कहा जाता है। तो स्पर्श पर ध्यान देने योग्य सक्षम करने से मानक फोकस पहले स्पर्श पर होता है। कीबोर्ड और सब कुछ आ जाएगा।
मिंसमैन

1
मुझे लगता है कि यह इसे करने का सबसे अच्छा तरीका है। इसके अलावा, ऊपर का मंबो-जंबो xml मैजिक डमी कोड संपादित पाठों के एक जटिल सेट के लिए काम नहीं करता था ... अगर यह काम करता है, तो मैं निश्चित रूप से वोट दूंगा।
राडू

लेकिन अगर आप कई संपादित पाठ कर रहे हैं, तो यह अगले संपादित पाठ पर ध्यान केंद्रित करेगा और कीबोर्ड को खोल देगा ताकि Android को जोड़ना बेहतर हो : windowSoftInputMode = "StateAlwaysHidden" विशेष गतिविधि के लिए।
करण शर्मा

नोट: Android P पर सिस्टम अब डिफ़ॉल्ट फ़ोकस नहीं लेगा। इसका अर्थ है कि यह हैक आवश्यक नहीं है कि पी। से शुरू किया जाए
मिंसमैन

65

मैंने व्यक्तिगत रूप से कई उत्तरों की कोशिश की थी, लेकिन एडिटटेक्स्ट पर अभी भी ध्यान केंद्रित किया गया है। मैं केवल नीचे के दो समाधानों का एक साथ उपयोग करके इसे हल करने में कामयाब रहा।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

(सिल्वर से संदर्भ https://stackoverflow.com/a/8639921/15695 )

और हटा दें

 <requestFocus />

EditText पर

(फ्लोयडडिक्ट से संदर्भ https://stackoverflow.com/a/9681809 )


1
मुझे इसके अलावा edittext.clearFocus () को जोड़ने के लिए काम करना पड़ा :)
नव

57

देर से लेकिन सरल उत्तर, बस XML के मूल लेआउट में इसे जोड़ें।

android:focusable="true" 
android:focusableInTouchMode="true"

अपवोट अगर यह आपकी मदद की! हैप्पी कोडिंग :)


2
मेरे लिए पूरी तरह से काम किया। ध्यान देने वाली एक और बात है, दृश्य को स्क्रॉल करने के लिए इन पंक्तियों को न जोड़ें। यह स्क्रॉल दृश्य में काम नहीं करेगा। लेकिन रैखिक लेआउट के साथ पूरी तरह से काम किया।
कार्तिक श्रीनिवासन

46

इस समाधान में से किसी ने भी मेरे लिए काम नहीं किया। जिस तरह से मैं ऑटोफोकस को ठीक करता हूं वह था:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>

2
Android: WindowSoftInputMode = एंड्रॉइड मेनिफेस्ट में किसी भी गतिविधि पर "समायोजनपैन"
rallat

43

सरल समाधान: में AndroidManifestमें Activityटैग उपयोग

android:windowSoftInputMode="stateAlwaysHidden"

6
कड़े शब्दों में, यह मुद्दे को हल नहीं करता है। ओपी ने कहा: "मुझे स्टार्टअप पर इनपुट फोकस करने के लिए कोई नियंत्रण नहीं चाहिए।" आपका समाधान केवल कीबोर्ड को छुपाता है, एक उप-अंतर अंतर करता है।
कटजेनहट

@katzenhut हाँ, इस जवाब के साथ मेरा मुद्दा बिल्कुल। मेरे संपादन पर ध्यान केंद्रित करने से एक PlaceAutoComplete गतिविधि खुल जाती है, इसलिए यह उत्तर अधूरा है
Zach

यह उत्तर पूर्ण होगा यदि प्रश्न यह था: मैं हमेशा कैसे सुनिश्चित करता हूं कि मेरी गतिविधि कभी भी कीबोर्ड नहीं दिखाती है। जो नहीं है।
मार्टिन मार्कोसिनी

37

आप बस "फ़ोकस करने योग्य" और "टच मोड में फ़ोकस करने योग्य " सेट कर सकते हैं, जो पहली बार TextViewमें सही है layout। इस तरह से जब गतिविधि शुरू होती है, TextViewतो ध्यान केंद्रित किया जाएगा, लेकिन इसकी प्रकृति के कारण, आपको स्क्रीन पर केंद्रित कुछ भी दिखाई नहीं देगा और, ज़ाहिर है, कोई कीबोर्ड प्रदर्शित नहीं होगा ...


मेरे लिए पूरी तरह से काम करता है, केवल मैं अपनी गतिविधि में सबसे अधिक लेआउट पर मूल्य निर्धारित करता हूं और पहले टेक्स्टव्यू के लिए नहीं
Maverick1st

36

निम्नलिखित में मेरे लिए काम किया Manifest। लिखो ,

<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>

1
यह टेक्स्ट फ़ील्ड को अन-फोकस नहीं करता है: यह केवल कीबोर्ड को छुपाता है। आपको अभी भी एक संकेत मिलेगा कि क्षेत्र से बाहर धकेल दिया गया है, और कोई भी रंग राज्य चयनकर्ता "केंद्रित = सत्य" स्थिति प्रदर्शित करेगा।
ए। रैगर

31

मुझे प्रोग्रामिक रूप से सभी क्षेत्रों से ध्यान हटाने की आवश्यकता थी। मैंने अपनी मुख्य लेआउट परिभाषा में निम्नलिखित दो कथन जोड़े।

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

बस। मेरी समस्या को तुरन्त ठीक किया। धन्यवाद, रजत, मुझे सही दिशा में इंगित करने के लिए।


28

फ़ाइल android:windowSoftInputMode="stateAlwaysHidden"के गतिविधि टैग में जोड़ें Manifest.xml

स्रोत


1
यह टेक्स्ट फ़ील्ड को अन-फोकस नहीं करता है: यह केवल कीबोर्ड को छुपाता है। आपको अभी भी एक संकेत मिलेगा कि क्षेत्र से बाहर धकेल दिया गया है, और कोई भी रंग राज्य चयनकर्ता "केंद्रित = सत्य" स्थिति प्रदर्शित करेगा।
ए। रैगर

25

यदि आपके पास अपनी गतिविधि पर एक और दृश्य है जैसे ListView, आप यह भी कर सकते हैं:

ListView.requestFocus(); 

अपने onResume()से ध्यान आकर्षित करने के लिए editText

मुझे पता है कि इस सवाल का जवाब दिया गया है लेकिन सिर्फ एक वैकल्पिक समाधान प्रदान करना है जो मेरे लिए काम करता है :)


22

अपने पहले संपादन योग्य क्षेत्र से पहले यह कोशिश करें:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();

21

onCreateविधि में निम्नलिखित जोड़ें :

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

1
यह टेक्स्ट फ़ील्ड को अन-फोकस नहीं करता है: यह केवल कीबोर्ड को छुपाता है। आपको अभी भी एक संकेत मिलेगा कि क्षेत्र से बाहर धकेल दिया गया है, और कोई भी रंग राज्य चयनकर्ता "केंद्रित = सत्य" स्थिति प्रदर्शित करेगा।
ए। रैगर

17

यह होने के नाते कि मैं XML को किसी ऐसी चीज़ के साथ प्रदूषित करना पसंद नहीं करता, जो कार्यक्षमता से संबंधित है, मैंने यह तरीका बनाया है कि "पारदर्शी रूप से" पहले ध्यान देने योग्य दृश्य से ध्यान चुराता है और फिर आवश्यक होने पर खुद को दूर करना सुनिश्चित करता है!

public static View preventInitialFocus(final Activity activity)
{
    final ViewGroup content = (ViewGroup)activity.findViewById(android.R.id.content);
    final View root = content.getChildAt(0);
    if (root == null) return null;
    final View focusDummy = new View(activity);
    final View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            view.setOnFocusChangeListener(null);
            content.removeView(focusDummy);
        }
    };
    focusDummy.setFocusable(true);
    focusDummy.setFocusableInTouchMode(true);
    content.addView(focusDummy, 0, new LinearLayout.LayoutParams(0, 0));
    if (root instanceof ViewGroup)
    {
        final ViewGroup _root = (ViewGroup)root;
        for (int i = 1, children = _root.getChildCount(); i < children; i++)
        {
            final View child = _root.getChildAt(i);
            if (child.isFocusable() || child.isFocusableInTouchMode())
            {
                child.setOnFocusChangeListener(onFocusChangeListener);
                break;
            }
        }
    }
    else if (root.isFocusable() || root.isFocusableInTouchMode())
        root.setOnFocusChangeListener(onFocusChangeListener);

    return focusDummy;
}

15

देर से, लेकिन शायद मददगार। अपने लेआउट के शीर्ष पर एक डमी EditText बनाएं तो फोन myDummyEditText.requestFocus()मेंonCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

जैसा मैं उम्मीद करता हूं वैसा ही व्यवहार करने लगता है। कॉन्फ़िगरेशन परिवर्तन आदि को संभालने की कोई आवश्यकता नहीं है, मुझे इसकी आवश्यकता एक लंबी पाठ दृश्य (निर्देश) वाली गतिविधि के लिए है।


केवल मूल दृश्य के साथ ऐसा क्यों नहीं किया जाता है?
CJBS


13

हाँ, मैंने एक ही काम किया है - एक 'डमी' लीनियर लेआउट बनाएं, जिसमें शुरुआती फोकस मिलता है। इसके अलावा, मैंने 'अगला' फ़ोकस आईडी सेट किया है ताकि उपयोगकर्ता एक बार स्क्रॉल करने के बाद इसे और अधिक फोकस न कर सके:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

बहुत सारे काम सिर्फ एक दृश्य पर ध्यान केंद्रित करने से छुटकारा पाने के लिए ।।

धन्यवाद


12

मेरे लिए, सभी उपकरणों पर काम करने वाला यह है:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

बस इसे समस्याग्रस्त ध्यान केंद्रित दृश्य से पहले एक दृश्य के रूप में रखें, और यह बात है।


10

मैंने जो सबसे सरल काम किया है, वह ऑनक्रिएट में एक और दृश्य पर ध्यान केंद्रित करना है:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

इसने सॉफ्ट कीबोर्ड को बंद कर दिया और एडिटटेक्स्ट में चमकता कोई कर्सर नहीं था।


10

यह सही और सबसे आसान समाधान है। मैं हमेशा अपने ऐप में इसका उपयोग करता हूं।

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

यह टेक्स्ट फ़ील्ड को अन-फोकस नहीं करता है: यह केवल कीबोर्ड को छुपाता है। आपको अभी भी एक संकेत मिलेगा कि क्षेत्र से बाहर धकेल दिया गया है, और कोई भी रंग राज्य चयनकर्ता "केंद्रित = सत्य" स्थिति प्रदर्शित करेगा।
ए। रेजर

9
<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>

8

इस कोड को Manifestफ़ाइल के अंदर लिखें Activityजहाँ आप कीबोर्ड को खोलना नहीं चाहते हैं।

android:windowSoftInputMode="stateHidden"

प्रकट फ़ाइल:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.projectt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="24" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
         <activity
            android:name=".Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Login"
            **android:windowSoftInputMode="stateHidden"**
            android:label="@string/app_name" >
        </activity>

    </application>

</manifest>

2
यह टेक्स्ट फ़ील्ड को अन-फोकस नहीं करता है: यह केवल कीबोर्ड को छुपाता है। आपको अभी भी एक संकेत मिलेगा कि क्षेत्र से बाहर धकेल दिया गया है, और कोई भी रंग राज्य चयनकर्ता "केंद्रित = सत्य" स्थिति प्रदर्शित करेगा।
ए। नागर

7

पर onCreateअपनी गतिविधि की, बस उपयोग जोड़ने के clearFocus()अपने EditText तत्व पर। उदाहरण के लिए,

edittext = (EditText) findViewById(R.id.edittext);
edittext.clearFocus();

और यदि आप किसी अन्य तत्व पर ध्यान केंद्रित करना चाहते हैं, तो requestFocus()उस पर उपयोग करें । उदाहरण के लिए,

button = (Button) findViewById(R.id.button);
button.requestFocus();

6

जब मेरा बटन दबाया जाता है, तो मैं फ़ोकस को चुराने से रोकने के लिए निम्न कोड का उपयोग करता हूं।

addButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        View focused = internalWrapper.getFocusedChild();
        focused.setVisibility(GONE);
        v.requestFocus();
        addPanel();
        focused.setVisibility(VISIBLE);
    }
});

मूल रूप से, संपादित पाठ को छिपाएँ और फिर उसे फिर से दिखाएँ। यह मेरे लिए काम करता है क्योंकि EditText नहीं है देखने में है इसलिए यह कोई फर्क नहीं पड़ता कि यह दिखा रहा है या नहीं।

आप इसे छिपाने की कोशिश कर सकते हैं और इसे उत्तराधिकार में दिखा सकते हैं कि क्या यह ध्यान केंद्रित करने में मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.