【问题标题】:Allow multi-line in EditText view in Android?在 Android 的 EditText 视图中允许多行?
【发布时间】:2011-05-13 03:05:00
【问题描述】:

如何在Android的EditText视图中允许多行?

【问题讨论】:

    标签: android android-edittext multiline


    【解决方案1】:

    默认情况下,Android 中的所有 EditText 小部件都是多行的。

    这里是一些示例代码:

    <EditText
        android:inputType="textMultiLine" <!-- Multiline input -->
        android:lines="8" <!-- Total Lines prior display -->
        android:minLines="6" <!-- Minimum lines -->
        android:gravity="top|start" <!-- Cursor Position -->
        android:maxLines="10" <!-- Maximum Lines -->
        android:layout_height="wrap_content" <!-- Height determined by content -->
        android:layout_width="match_parent" <!-- Fill entire width -->
        android:scrollbars="vertical" <!-- Vertical Scroll Bar -->
    />
    

    【讨论】:

    • 有没有办法将 inputType 设置为 textMultiLine 并将 imeOptions 设置为 actionSend?当我将 inputType 设置为 textMultiLine 并将 imeOptions 设置为 actionSend 时,我在 S4 键盘上看到了 Enter 键而不是发送。
    • 对于“textMultiLine 和 imeOptions”,请参阅 stackoverflow.com/questions/5014219/…
    • 需要注意的是,添加inputType 至少会否定linesminLines 属性。我有inputType="phone" 和lines 属性没有效果
    • 不要使用这个。由于android:inputType="textMultiLine",一旦您键入内容就会导致IndexOutOfBoundsException
    • 如果使用 AppCompactTextView 需要这一行 android:inputType="textMultiLine"
    【解决方案2】:

    你可能会发现它更好用:

    <EditText 
    ...
    android:inputType="textMultiLine"
    />
    

    这是因为 android:singleLine 已被弃用。

    【讨论】:

    • Sharduls 的答案肯定适用于现代 API。由于他们删除了答案中已弃用的singleLine 部分(很久以前)。关于问题本身,这是他们回答中最重要的部分。
    • 不要使用这个。输入内容后立即导致IndexOutOfBoundsException。多行现在是默认设置。
    • @Chisko XML 属性不会导致 IndexOutOfBoundsException。我不记得默认的 inputType 是什么时候改变的(是吗?),但出于向后兼容性的原因,最好保留它。
    • @Knossos 好吧,对你来说很奇怪,对我来说也是如此。我从字面上复制粘贴了代码,并且每次都使用多个参数的每种可能组合崩溃,直到我将其删除。去图吧。
    【解决方案3】:

    这对我有用,实际上这两个属性很重要:inputTypelines。此外,您可能需要一个滚动条,下面的代码展示了如何制作一个:

     <EditText
            android:id="@+id/addr_edittext"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="top|left"
            android:inputType="textEmailAddress|textMultiLine"
            android:lines="20"
            android:minLines="5"
            android:scrollHorizontally="false"
            android:scrollbars="vertical" />
    

    【讨论】:

      【解决方案4】:

      这就是我应用下面的代码 sn-p 的方式,它工作正常。希望,这会对某人有所帮助。

      <EditText 
          android:id="@+id/EditText02"
          android:gravity="top|left" 
          android:inputType="textMultiLine"
          android:layout_height="wrap_content"
          android:layout_width="wrap_content"
          android:lines="5" 
          android:scrollHorizontally="false" 
      />
      

      干杯! ...谢谢。

      【讨论】:

        【解决方案5】:

        EditText 具有 singleLine 属性。您可以在 XML 中设置或通过调用 setSingleLine(false); http://developer.android.com/reference/android/widget/TextView.html#setSingleLine%28%29

        【讨论】:

          【解决方案6】:

          试试这个, 将这些行添加到您的编辑文本视图中,我将添加我的。确保你理解它

          android:overScrollMode="always"
          android:scrollbarStyle="insideInset"
          android:scrollbars="vertical"
          
          <EditText
              android:inputType="textMultiLine"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:id="@+id/editText_newprom_description"
              android:padding="10dp"
              android:lines="5"
              android:overScrollMode="always"
              android:scrollbarStyle="insideInset"
              android:minLines="5"
              android:gravity="top|left"
              android:scrollbars="vertical"
              android:layout_marginBottom="20dp"/>
          

          并在您的 java 类上单击列表器对此编辑文本进行如下操作,我将根据您的添加我的名称。

          EditText description;
          description = (EditText)findViewById(R.id.editText_newprom_description);
          
          description.setOnTouchListener(new View.OnTouchListener() {
                      @Override
                      public boolean onTouch(View view, MotionEvent motionEvent) {
          
                          view.getParent().requestDisallowInterceptTouchEvent(true);
                          switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){
                              case MotionEvent.ACTION_UP:
                                  view.getParent().requestDisallowInterceptTouchEvent(false);
                                  break;
                          }
          
                          return false;
                      }
          
                  });
          

          这对我来说很好用

          【讨论】:

          • 谢谢!这就是我在可滚动视图中使编辑文本可滚动的方式。
          【解决方案7】:

          所有这些都很好,但如果您的编辑文本位于上层滚动视图中,则这些都不起作用:) 最常见的示例可能是“设置”视图,其中包含太多项目,以至于超出了可见区域。在这种情况下,您将它们全部放入滚动视图以使设置可滚动。如果您在设置中需要多行可滚动编辑文本,则其滚动将不起作用。

          【讨论】:

            【解决方案8】:

            要禁用先前在主题中分配的行数,请使用 xml 属性:android:lines="@null"

            【讨论】:

              【解决方案9】:
               <EditText
                         android:id="@id/editText" //id of editText
                         android:gravity="start"   // Where to start Typing
                         android:inputType="textMultiLine" // multiline
                         android:imeOptions="actionDone" // Keyboard done button
                         android:minLines="5" // Min Line of editText
                         android:hint="@string/Enter Data" // Hint in editText
                         android:layout_width="match_parent" //width editText
                         android:layout_height="wrap_content" //height editText
                         /> 
              

              【讨论】:

                【解决方案10】:
                android:inputType="textMultiLine"
                

                此代码行对我有用。将此代码添加到您的 xml 文件中编辑文本。

                【讨论】:

                  【解决方案11】:

                  如果有人使用 AppCompatEditText 那么你需要设置 inputType="textMultiLine" 这是你可以复制的代码


                     <androidx.appcompat.widget.AppCompatEditText
                          android:padding="@dimen/_8sdp"
                          android:id="@+id/etNote"
                          android:minLines="6"
                          android:singleLine="false"
                          android:lines="8"
                          android:scrollbars="vertical"
                          android:background="@drawable/rounded_border"
                          android:layout_width="0dp"
                          android:layout_height="wrap_content"
                          android:layout_marginStart="@dimen/_25sdp"
                          android:layout_marginTop="32dp"
                          android:layout_marginEnd="@dimen/_25sdp"
                          android:autofillHints=""
                  
                          android:gravity="start|top"
                          android:inputType="textMultiLine"
                           />
                  

                  背景

                     <?xml version="1.0" encoding="utf-8"?>
                     <shape android:shape="rectangle" 
                      xmlns:android="http://schemas.android.com/apk/res/android">
                     <corners android:radius="@dimen/_5sdp"/>
                     <stroke android:width="1dp" android:color="#C8C8C8"/>
                     </shape>
                  

                  【讨论】:

                    【解决方案12】:

                    添加这个 android:inputType="textMultiLine" 在相关字段的 XML 文件中。

                    【讨论】:

                      【解决方案13】:

                      我从http://www.pcsalt.com/android/edittext-with-single-line-line-wrapping-and-done-action-in-android/ 学到了这一点,虽然我自己不喜欢这个网站。如果您想要多行但想要保留回车按钮作为发布按钮,请将列表视图的“水平滚动”设置为 false。

                      android:scrollHorizontally="false"

                      如果它在 xml 中不起作用,那么以编程方式执行它会很奇怪。

                      listView.setHorizontallyScrolling(false);

                      【讨论】:

                        【解决方案14】:

                        另一件巧妙的事情是使用android:minHeightandroid:layout_height="wrap_content"。这样,您可以设置编辑为空时的大小,并且当用户输入内容时,它会根据用户输入的数量进行拉伸,包括多行。

                        【讨论】:

                          【解决方案15】:
                          <EditText
                                          android:hint="Address"
                                          android:layout_width="wrap_content"
                                          android:layout_height="wrap_content"
                                          android:layout_weight="1"
                                          android:inputType="textMultiLine|textNoSuggestions"
                                          android:id="@+id/edittxtAddress"
                                          android:layout_marginLeft="@dimen/textsize2"
                                          android:textColor="@android:color/white"
                                          android:scrollbars="vertical"
                                          android:minLines="2"
                                      android:textStyle="normal" />
                          

                          在 Activity 中删除“\n”是用户按下下一行

                          String editStr= edittxtAddress.getText().toString().trim();
                          
                           MyString= editStr.replaceAll("\n"," ");
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2014-11-12
                            • 2022-01-08
                            • 2021-12-10
                            • 1970-01-01
                            • 2017-11-06
                            • 2018-02-20
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多