【问题标题】:Create a multiline EditText programmatically以编程方式创建多行 EditText
【发布时间】:2013-02-08 14:00:45
【问题描述】:

我正在尝试通过代码创建多行 EditText。 这是我使用的:

EditText txt = new EditText(this);    
lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f);
txt.setLayoutParams(lp);
txt.setSingleLine(false); 
txt.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

但它仍然在一行中。

【问题讨论】:

    标签: android android-edittext multiline


    【解决方案1】:

    除了上述建议 - 如果您无法正常工作,您可能需要设置以下附加参数

    texInput.setHorizontallyScrolling(false);
    texInput.setHorizontalScrollBarEnabled(false);
    

    如果您正在以编程方式更改编辑文本的高度,那么您可能还想通过调用 requestLayout() 来请求布局。

    【讨论】:

      【解决方案2】:

      在我的手机上,更改 imeOptions 和 inputType 没有任何作用;设置 moveMethod 和/或 scrollBarStyle 会严重影响组件,以至于用户将无法选择任何文本; isVerticalScrollBarEnabled 和 isHorizo​​ntalScrollBarEnabled 什么都不做;我能做的最好的就是使用

      txt.setSingleLine(false);
      

      txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); 似乎是不必要的)但这不会在该死的 EditText 中显示任何滚动条。最终我放弃了,只要我需要一个多行 EditText,我就会膨胀一个布局 sn-p。这是布局:

      <?xml version="1.0" encoding="utf-8"?>
      <EditText xmlns:android="http://schemas.android.com/apk/res/android"
      android:inputType="textMultiLine"
      android:lines="4"
      android:minLines="4"
      android:gravity="top|start"
      android:maxLines="4"
      android:layout_height="wrap_content"
      android:layout_width="fill_parent"
      android:scrollbars="vertical"
      />
      

      这里是 Anko sn-p:

      fun ViewManager.multiLineEditText(@StyleRes theme: Int = 0, init: EditText.() -> Unit): EditText = ankoView(
          { ctx -> ctx.layoutInflater.inflate(R.layout.util_multilineedittext, this@multiLineEditText as ViewGroup, false) as EditText }, theme, init)
      

      在 Android 上的开发太糟糕了。

      【讨论】:

        【解决方案3】:

        结合以上所有答案是正确的答案,所以它是:

        texInput.setSingleLine(false);
        texInput.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
        texInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
        texInput.setLines(5);
        texInput.setMaxLines(10);
        texInput.setVerticalScrollBarEnabled(true);
        texInput.setMovementMethod(ScrollingMovementMethod.getInstance());
        texInput.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
        

        【讨论】:

        • 谢谢,Android API 在这方面很糟糕。滚动条对我来说是不可见的,但这并不重要,因为至少文本最终能够以多行方式输入(以前没有 Enter 按钮,或者 Enter 按钮插入空格而不是新行 -这是多么迟钝)。
        • 谢谢,但现在滚动条不可见,并且由于某种原因无法选择文本。
        • 这里唯一缺少的是:textInput..setGravity(Gravity.TOP | Gravity.LEFT);
        【解决方案4】:

        最终对我有用的组合是:

        answerView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);
        answerView.setSingleLine(false);
        

        至少部分我使用setInputType 来配置几个不同的选项,因此它比其他一些可能性更有意义。

        【讨论】:

          【解决方案5】:

          你也可以使用这个:

          txt.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_MULTI_LINE);
          

          【讨论】:

            【解决方案6】:

            应该这样做

            txt.setSingleLine(false);
            txt.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
            

            【讨论】:

              【解决方案7】:

              试试这个

              txt.setLines(number of lines);
              

              【讨论】:

                【解决方案8】:

                将其包含在您的代码中:

                txt.setLines(maxlines);
                

                maxlines 将是您希望在 EditText 中允许的最大行数。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-12-06
                  • 1970-01-01
                  • 2021-06-04
                  • 2011-01-16
                  相关资源
                  最近更新 更多