EditText不会包装其文本

时间:2012-05-16 01:19:26

标签: android view android-edittext

我知道Stackoverflow中有很多相关的问题,但是我尝试用其中任何一个编写的所有内容,到目前为止我无法使用它。

我的问题很简单。我有一个Android应用程序,我有一个用户将输入文本的框。但是,我不希望这个文本是多行的(它不应该有“\ n”),但如果行的大小大于视口,我希望它包装。所以基本上,我想要的是与Gmail主题字段上的textBox相同的行为。

这是我的全部观点:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/question"
        android:textAppearance="@style/titleFont"/>

<EditText
    android:id="@+id/edit_question_value"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.3"
    android:gravity="top"
    android:inputType="textImeMultiLine|textEmailSubject"
    android:maxLength="70"
        >

</EditText>

<TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/answer"
        android:textAppearance="@style/titleFont"/>

<EditText
        android:id="@+id/edit_question_answer"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="top"
        android:layout_weight="0.7"
        android:inputType="textMultiLine"/>

<LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">

    <Button
            android:id="@+id/save_question"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_weight="0.5"
            android:text="@string/save"/>

    <Button
            android:id="@+id/cancel_edit_question"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="@string/cancel"/>
</LinearLayout>

我想要拥有此行为的文本是id等于@ + id / edit_question_value的文本。到目前为止,我已经能够使它成为真正的多线(因此用户可以输入,如果他想要)或单行,文本将不会换行。也许文本周围的一些元素有一些干扰,这就是为什么我把整个视图包括在内。

有谁知道发生了什么事?

2 个答案:

答案 0 :(得分:8)

以前很多人一直困扰着我,在我需要的时候找不到答案。在纯XML中,即。如果我们可以使用编程而不仅仅是标记,那么如果可以的话,我们可以通过一些 hack 来实现。基本上,我们声明一个multiLine editText,然后捕获返回键以避免换行。

首先是 xml 中的声明:

<EditText
    android:id="@+id/noReturnEditText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"
    android:inputType="textMultiLine|textCapSentences"
    android:text="lorem ipsum \n dolor site amet helping stackoverflow" />

是的,我知道你在想什么“但是,嘿, Juan 这是一个多线人EditText,我想在gmail的主题领域有一个班轮”。我知道,我知道,但我们现在将通过删除我们不想要的多行部分的行为来处理它,同时保持我们想要的文本包装。

现在剩下的代码

EditText noReturnEditText = (EditText) findViewById(R.id.noReturnEditText);
         noReturnEditText.setOnKeyListener(new OnKeyListener(){
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) return true;
                return false;
            }
        });

您可以很容易地阅读代码,但是如果有人需要解释,我们将OnKeyListener设置为EditText我们希望“online-multilinelike”并且如果用户按下返回键(KEYCODE_ENTER)我们通过返回true告诉事件不要传播,在这种情况下我们已经处理了事件。

<强>结果:

enter image description here

<强>考虑

按返回键不是输入新行的唯一方法。用户可以复制/粘贴一些文本,最后在单行EditText上使用多行条目。不要担心!我们可以在存储之前去除它的值,或者像

那样使用它

myData = rawText.replace(System.getProperty("line.separator"), " ");

如果我有很多EditText次观看怎么办?

嗯,你基本上有两种选择。一个接一个地把它拉出来做这样的事情,列出每个视图的视图和循环。

//Declare the reusable listener
  OnKeyListener myListener = new OnKeyListener(){
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) return true;
            return false;
        }
    }  
//Loop through the views
    int viewIds[] = {R.id.edittext1,R.id.edittext2,R.id.edittext3,R.id.edittext4};
    for(int id : viewIds) ((EditText)findViewById).setOnKeyListener(myListener);

答案 1 :(得分:-1)

s = re.sub(r'(:\s+")(.*(?:\n(?!\s*"[^"\n:]+":).*)*)",$', lambda x: '{}{}",'.format(x.group(1), x.group(2).replace('"', "''")), s, flags=re.M)

尝试一下。当我将重力更改为上|左时为我工作