7

我知道 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 的文本。到目前为止,我已经能够使其真正成为多行(因此用户可以根据需要键入 enter)或单行并且文本不会换行。也许文本周围的一些元素受到了一些干扰,这就是我包含整个视图的原因。

有谁知道发生了什么?

4

2 回答 2

8

这是以前困扰很多人的事情,当我需要它时我找不到答案。在纯 XML 中,就是这样。如果我们可以使用编程而不仅仅是标记,如果可以的话,我们可以通过一些小技巧来做到这一点。基本上,我们声明一个 multiLine 编辑文本,然后捕获返回键以避免换行。

首先是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" />

是的,我知道你在想什么“但是,嘿,胡安,这是一个多线程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;
            }
        });

您可能可以很容易地阅读代码,但如果有人需要解释,我们将设置OnKeyListenerEditText我们想要的“单线多线”,如果用户按下返回键 (KEYCODE_ENTER),我们会告诉事件不要传播通过在这种情况下返回truewhich 意味着我们已经处理了事件。

结果:

在此处输入图像描述

注意事项

按回车键不是输入新行的唯一方法。用户可以复制/粘贴一些文本并最终在单行 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);
于 2012-05-16T01:56:25.890 回答
-1
<EditText
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:background="@color/color_red"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:gravity="top|left"
            android:inputType="textMultiLine|textCapSentences"
            android:lines="10"
            android:maxWidth="200dp"
            android:maxLength="200"
            android:maxLines="10"
            android:singleLine="false"
            android:textColor="@android:color/white"
            android:textSize="26sp" />

试试这个。当我将重力改为左上角时为我工作

于 2019-07-01T11:31:26.037 回答