2010-06-11 6 views
24

संपादन में, 'एंटर' कुंजी टाइप करने के बाद, सिस्टम इसके अंदर एक नई पंक्ति बना देता है। मैं अगली संपादन पर ध्यान केंद्रित करना चाहता हूं, कोई नई लाइन नहीं। कोड कैसे करें? एक्सएमएल में मेरी कोड हैKeyCode_ अगले edittext में प्रवेश करें

नीचे
<EditText 
    android:id="@+id/txtNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblNPCode" 
    android:layout_below="@+id/lblNPCode" 
    android:layout_centerHorizontal="true"/> 
<EditText 
    android:id="@+id/txtCNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblCNPCode" 
    android:layout_below="@+id/lblCNPCode" 
    android:layout_centerHorizontal="true"/> 

मैं भी setOnKeyListener

tCNPCode.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // TODO Auto-generated method stub 
      if(keyCode == 66) { 
       Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show(); 
       //tNPCode.setFocusable(true); 
      } 
      return false; 
     } 
    }); 

उत्तर

12

में महत्वपूर्ण कोड caputer आप requestFocus विधि का उपयोग करने के लिए है।

tCNPCode.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(keyCode == 66) { 
      txtCNPCode.requestFocus(); 
     } 
     return false; 
    } 
}); 
+1

धन्यवाद। मैं अनुरोध फोकस का उपयोग करता हूं। इसने काम कर दिया। वापसी सही जोड़ने की जरूरत है ;? – soclose

+3

मैं इसे ACTION_UP के साथ फ़िल्टर करने का सुझाव दूंगा क्योंकि आप ऑनकी विधि को दो बार दबाएंगे और यदि आप setOnKeyListener को ArrayList के अंदर EditTexts की सूची में कार्यान्वित कर रहे हैं, तो आपको दो चरणों आगे बढ़ने का जोखिम होगा। यदि (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) – jkanini

+0

मैं वास्तविक int अक्षर का उपयोग नहीं करता, क्योंकि यह बिल्कुल पठनीय नहीं है। – styler1972

34

तुम भी OnKeyListener उपयोग करने के लिए की जरूरत नहीं है: आपके मामले में ऐसा कुछ हो जाएगा। बस EditText पर लाइन android:singleLine="true" जोड़ें। इस ऑपरेशन के बाद EditText वैसे ही व्यवहार करता है जैसा आप चाहते हैं। तो, आपके विशेष मामले में:

<EditText 
    android:id="@+id/txtNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblNPCode" 
    android:layout_below="@+id/lblNPCode" 
    android:layout_centerHorizontal="true" 
    android:singleLine="true" 
/> 
<EditText 
    android:id="@+id/txtCNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblCNPCode" 
    android:layout_below="@+id/lblCNPCode" 
    android:layout_centerHorizontal="true" 
/> 

समस्या हल करता है।

+0

यह आईएमई एक्शन के साथ संयुक्त सबसे अच्छा विकल्प था –

+0

इस भयानक और सरल स्पष्टीकरण के लिए धन्यवाद – anetha

+1

यह आईडी ठीक है, लेकिन एंड्रॉइड: सिंगललाइन = "सत्य" बहिष्कृत है। –

9

इनपुट टाइप के विकल्पों में से एक का उपयोग करने का सबसे अच्छा तरीका है उदाहरण के लिए: android:inputType="textPersonName" यह वांछित प्रभाव प्राप्त करेगा। अन्य विकल्पों को भी देखें, यह आपको भविष्य में कुछ समय बचाएगा :)

आपको एंड्रॉइड का उपयोग नहीं करना चाहिए: सिंगललाइन = "सत्य", क्योंकि यह बहिष्कृत है। यहाँ दस्तावेजों इसके बारे में क्या कहते हैं क्या है:

यह विशेषता नहीं रहेगी तथा inputType विशेषता में textMultiLine झंडा द्वारा बदल दिया गया है। मौजूदा लेआउट को बदलने पर सावधानी बरतें, क्योंकि सिंगललाइन का डिफ़ॉल्ट मान गलत है (बहु-रेखा मोड), लेकिन यदि आप इनपुट टाइप के लिए कोई मान निर्दिष्ट करते हैं, तो डिफ़ॉल्ट सिंगल-लाइन मोड है। (यदि सिंगललाइन और इनपुट टाइप प्रकार दोनों पाए जाते हैं, तो इनपुट टाइप प्रकार एकल लाइन के मान को ओवरराइड कर देगा।)।

6

IME विकल्प, अच्छा वर्णन यहाँ http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422 और यहाँ http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions प्रलेखन पर विचार करें।

केवल एक चीज जो आपको चाहिए वह विशेषता है एंड्रॉइड: imeOptions = "actionNext" प्रत्येक संपादन टेक्स्ट पर। कुंजीपटल एक अगली कुंजी के साथ प्रकट होता है जहां एंटर होता है और अगले संपादन टेक्स्ट पर नेविगेट करने की अनुमति देता है।

लेकिन "actionNext" का क्रम ऊपर से नीचे तक है। उदाहरण के लिए, आप क्षैतिज लेआउट अगर:

<LinearLayout android:orientation="horizontal" > 
     <EditText android:id="@+id/et1" android:imeOptions="actionNext" /> 
     <EditText android:id="@+id/et2" android:imeOptions="actionNext" /> 
</LinearLayout> 

ET2 फोकस कभी नहीं मिलता है। आप कोड में इसे ठीक करना चाहिए:

et1.setOnEditorActionListener(new OnEditorActionListener() 
{ 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, 
      KeyEvent event) 
    { 
     switch (actionId) 
     { 
     case EditorInfo.IME_ACTION_NEXT: 
      boolean result = false; 
      TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT); 
      if (v1 != null) 
       result = v1.requestFocus(View.FOCUS_RIGHT); 
      else if (!result) 
      { 
       v1 = (TextView) v.focusSearch(View.FOCUS_DOWN); 
       if (v1 != null) 
        result = v1.requestFocus(View.FOCUS_DOWN); 
      } 
      if (!result) 
       v.onEditorAction(actionId); 
      break; 

     default: 
      v.onEditorAction(actionId); 
      break; 
     } 
     return true; 
    } 
}); 

वास्तविक लिंक: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/OykOG6XtE8w

1

बस XML लेआउट फ़ाइल में EditText बॉक्स करने के लिए लाइन की अधिकतम संख्या सेट करें: android:maxLength="1"