2012-01-12 16 views
10

यदि मैं एक एडिटटाक्स्ट विजेट पर सिंगललाइन = सत्य सेट करता हूं, तो मुझे एक सिंगल-लाइन एडिट कंट्रोल मिलता है जो उपयोगकर्ता द्वारा हार्ड रिटर्न डालने की अनुमति नहीं देता है (चालें दर्ज करें पर क्लिक करें एक नई लाइन डालने के बजाय अगला क्षेत्र)। अगर मैं सिंगललाइन = सत्य सेट नहीं करता हूं, तो उपयोगकर्ता हार्ड रिटर्न डाल सकता है।वर्ड-रैप के साथ एंड्रॉइड एडिटटेक्स्ट लेकिन कोई हार्ड रिटर्न

यदि मैं layout_height = "wrap_content" सेट करता हूं, तो टेक्स्ट टेक्स्ट को सभी टेक्स्ट दिखाने के लिए लंबवत रूप से बढ़ेगा। हालांकि, यह केवल तभी होता है जब सिंगललाइन सत्य पर सेट न हो।

तो, मेरा सवाल यह है कि क्या उपयोगकर्ता को हार्ड-लाइन ब्रेक दर्ज करने की इजाजत देने के बिना शब्द-रैपिंग और लंबवत आकार बदलना संभव है? मुझे लगता है कि मैं एंटर कीप्रेस को फंस सकता हूं, लेकिन फिर मुझे वहां अन्य तरीकों को पकड़ना होगा (कॉपी/पेस्ट, सुनिश्चित नहीं है कि और क्या?)। क्या संपत्तियों के सही संयोजन के साथ ऐसा करने का कोई आसान तरीका है?

मैं शब्द-लपेटना पसंद करता हूं जहां उपयोगकर्ता एकल पाठ संपादन नियंत्रण की क्षैतिज स्क्रॉलिंग की तुलना में सभी पाठ देख सकता है, लेकिन मैं वास्तव में उन्हें नहीं सोचना चाहता कि वे मल्टीलाइन टेक्स्ट (और I इसका समर्थन नहीं करना चाहते हैं)। मुझे लगता है कि जब मैं डेटा को अपने डेटाबेस में सहेजता हूं, तो मैं केवल हार्ड रिटर्न को रिक्त स्थान में परिवर्तित कर सकता हूं, अगर मुझे (विरासत ऐप मैं पीसी पर इस डेटा को सिंक करता हूं तो हार्ड रिटर्न को संभाल नहीं सकता)।

उत्तर

12

मैं भी ऐसा करने के लिए कुछ ढूंढ रहा था।

package com.kylemilligan.test; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.inputmethod.EditorInfo; 
import android.view.inputmethod.InputConnection; 
import android.widget.EditText; 

public class NoNewlineEditText extends EditText 
{ 

    public NoNewlineEditText(Context context) { 
     super(context); 
    } 

    public NoNewlineEditText(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
    }  

    @Override 
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) 
    { 
     InputConnection connection = super.onCreateInputConnection(outAttrs); 
     int imeActions = outAttrs.imeOptions & EditorInfo.IME_MASK_ACTION; 
     if ((imeActions & EditorInfo.IME_ACTION_DONE) != 0) 
     { 
      // clear the existing action 
      outAttrs.imeOptions ^= imeActions; 
      // set the DONE action 
      outAttrs.imeOptions |= EditorInfo.IME_ACTION_DONE; 
     } 
     if ((outAttrs.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) 
     { 
      outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION; 
     } 
     return connection; 
    } 
} 

और फिर एक्सएमएल प्रयोग में की तरह:

 <com.kylemilligan.test.NoNewlineEditText 
      android:id="@+id/noNewLineText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="top|left" 
      android:imeOptions="actionDone" 
      android:minLines="5" /> 

आशा इस मदद करता है एकमात्र समाधान मैंने पाया EditText विस्तार करने के लिए इस प्रकार थी!

+0

तो उपयोगी है। मुझे नहीं पता कि यह एक अंतर्निहित व्यवहार के रूप में क्यों नहीं पेश किया जाता है। – JulianSymes

+6

यह काम करता है क्योंकि एंड्रॉइड स्वचालित रूप से बहुभाषी पाठ दृश्यों पर 'EditorInfo.IME_FLAG_NO_ENTER_ACTION' सेट करता है। आप इसे सरल बना सकते हैं: 'इनपुट कनेक्शन कनेक्शन = super.onCreateInputConnection (आउटएटर); outAttrs.imeOptions & = ~ (EditorInfo.IME_FLAG_NO_ENTER_ACTION); रिटर्न कनेक्शन; ' – Foxichu

3

मुझे इसमें रूचि थी, और महसूस किया कि अंतर्निहित एंड्रॉइड मैसेजिंग ऐप ने सॉफ्ट कीबोर्ड पर एंटर कुंजी के बिना टेक्स्ट लपेट लिया है। स्रोत लेआउट here के अनुसार, यह निम्न विकल्पों के साथ किया गया है। सभी आवश्यक नहीं हैं; मेरा मानना ​​है कि कुंजी textShortMessage, textMultiLine, और flagNoEnterAction है:

android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine" 
android:imeOptions="actionSend|flagNoEnterAction" 
+0

यह मैंने देखा है दूसरों की तुलना में यह एक बेहतर समाधान है। – bond

+0

लगभग। मैं इस समाधान का उपयोग नहीं कर सका क्योंकि ऐसा लगता है कि मुझे 'actionDone' का उपयोग करने की अनुमति नहीं है। मैं इमोजी, या ऐसा कुछ और नहीं चाहता; मैं बस एक 'किया' कार्रवाई चाहता हूं, और मैं इसे इस समाधान के साथ काम नहीं कर सकता। –

0
editText.setImeOptions(EditorInfo.IME_ACTION_DONE); 
//This will treat Enter as Done instead of new line: 
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 

And in XML: 
android:inputType="textMultiLine" 
संबंधित मुद्दे