【问题标题】:Android AlertDialog multiline EditTextAndroid AlertDialog 多行 EditText
【发布时间】:2017-07-09 09:22:10
【问题描述】:

有没有办法在 AndroidAlertDialog 中创建多行 EditText。我设置了 setLines,它显示了几行更大的 EditText。但是当我输入它时,它不会转到下一行,并且仍然输入 同一行。这是我的代码。

Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Comment");

        final EditText input = new EditText(this);

        final String item_value = ItemList.get(position).get("comment");

        input.setText(item_value);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        input.setLines(5);
        input.setMaxLines(5);
        input.setGravity(Gravity.LEFT | Gravity.TOP);
        builder.setView(input);

        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {


            }
        });

        builder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();

我的对话框看起来像这样。

那么我该如何解决这个问题。谢谢和问候。

【问题讨论】:

    标签: android android-edittext multiline


    【解决方案1】:

    在您的 XML 中设置属性 android:inputType="textMultiLine"

    如果不行,你必须自己实现TextWatcher并手动换行。

    【讨论】:

      【解决方案2】:

      使用输入类型input.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE)input.setSingleLine(false)。所以你的代码将是 -

      Builder builder = new AlertDialog.Builder(this);
              builder.setTitle("Comment");
      
              final EditText input = new EditText(this);
      
              final String item_value = ItemList.get(position).get("comment");
      
              input.setText(item_value);
              input.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
              input.setSingleLine(false)
              input.setLines(5);
              input.setMaxLines(5);
              input.setGravity(Gravity.LEFT | Gravity.TOP);
              builder.setView(input);
      
              builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int whichButton) {
      
      
                  }
              });
      
              builder.setNegativeButton("Cancel",
                      new DialogInterface.OnClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                              dialog.dismiss();
                          }
                      });
              AlertDialog alert = builder.create();
              alert.show();
      

      【讨论】:

      • 如果要在键盘上自动完成,请添加 TYPE_CLASS_TEXT 标志:input.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_CLASS_TEXT);
      【解决方案3】:

      这对我有用。您可以将此属性用于运行时 EditText。

      <EditText
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:gravity="top|left"
              android:inputType="textMultiLine"
              android:lines="8"
              android:maxLines="10"
              android:minLines="6"
              android:scrollbars="vertical" />
      

      【讨论】:

        【解决方案4】:
        Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Comment");
        
        final EditText input = new EditText(this);
        
        final String item_value = ItemList.get(position).get("comment");
        
        input.setText(item_value);
        input.setInputType(InputType.TYPE_CLASS_TEXT);
        input.setSingleLine(false);
        input.setMaxLines(5);
        input.setGravity(Gravity.LEFT | Gravity.TOP);
        builder.setView(input);
        
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int whichButton) {
        
            }
        });
        
        builder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
        

        【讨论】:

          【解决方案5】:

          为您的 EditText 尝试此代码:

          input.setSingleLine(false);  //add this
          input.setLines(4);
          input.setMaxLines(5);
          input.setGravity(Gravity.LEFT | Gravity.TOP);
          input.setHorizontalScrollBarEnabled(false); //this
          

          【讨论】:

          • 最好用Gravity.START
          【解决方案6】:

          在 DialogFragment 中包装的 Kotlin 版本:

          import android.app.Dialog
          import android.os.Bundle
          import android.text.InputType
          import android.view.Gravity
          import androidx.appcompat.app.AlertDialog
          import androidx.appcompat.widget.AppCompatEditText
          import androidx.fragment.app.DialogFragment
          
          class MultilineEditDialog : DialogFragment() {
          
              override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
                  val input = AppCompatEditText(requireContext()).apply {
                      inputType = InputType.TYPE_TEXT_FLAG_MULTI_LINE
                      isSingleLine = false
                      setLines(3)
                      maxLines = 3
                      gravity = Gravity.START and Gravity.TOP
                      hint = "Hint"
                  }
                  return AlertDialog.Builder(requireContext()).apply {
                      setTitle("Title")
                      setView(input)
                      setPositiveButton(android.R.string.ok) { _, _ ->
                          // TODO take an action
                      }
                      setNegativeButton(android.R.string.cancel, null)
                  }.create()
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2020-12-06
            • 2016-03-29
            • 1970-01-01
            • 2023-03-17
            • 2017-08-02
            • 2013-06-13
            • 2011-06-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多