【问题标题】:Android: Make multiline edittext scrollable, disable in vertical scroll viewAndroid:使多行edittext可滚动,在垂直滚动视图中禁用
【发布时间】:2014-06-12 17:19:02
【问题描述】:

我正在开发一个应用程序,其中我是一个结构。

根据我的应用程序要求,我在 xml 中创建了水平滚动视图,然后在 .java 中创建了垂直滚动视图:

// Vertical Scroll view in Linear layout
ScrollView scrollView = new ScrollView(this);
scrollView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

然后我以编程方式创建了一个表格视图并将其添加到滚动视图中。我创建了多行编辑文本并禁用它,因为我想在它运行时设置文本并将其添加到表格视图中作为一行..

EditText editText = new EditText(this);
editText.setId(1);
editText.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,0f));
editText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
editText.setGravity(Gravity.TOP|Gravity.LEFT);
editText.setHint("Comment");
editText.setSingleLine(false);
editText.setLines(5);
editText.setMaxLines(5);
editText.setText(CommentFromDB);
editText.setEnabled(false);

tableLayout.addView(editText);

// Add table in Horizontal scroll view
scrollView.addView(tableLayout);

现在我想让我通过代码实现的编辑文本可滚动:

editText.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View view, MotionEvent event) {
            if (view.getId() == 1) {
                view.getParent().requestDisallowInterceptTouchEvent(true);
                switch (event.getAction()&MotionEvent.ACTION_MASK){
                case MotionEvent.ACTION_UP:
                    view.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
                case MotionEvent.ACTION_DOWN:
                    view.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
                }
            }
            return false;
        }
    });

但编辑文本不容易滚动。我需要平滑滚动。

如何做到这一点,请指导我。

【问题讨论】:

  • 你为什么不尝试使用 TextView ,因为无论如何你都禁用了 EditText
  • @Libin- 我可以让 Textview 在相同大小的情况下滚动吗???

标签: android android-edittext android-ui android-scrollview android-scrollbar


【解决方案1】:

你可以做一件事。

只需使编辑文本可聚焦为 false。并应用于触摸监听器。

因此用户无法编辑文本,它将滚动为:

EditText editText = new EditText(this);
editText.setId(1);
editText.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,0f));
editText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
editText.setGravity(Gravity.TOP|Gravity.LEFT);
editText.setHint("Comment");
editText.setSingleLine(false);
editText.setLines(5);
editText.setMaxLines(5);
editText.setText(CommentFromDB);
editTextRemark.setFocusable(false);

将 onTouchListner 应用为:

editTextRemark.setOnTouchListener(touchListener);

OnTouchListener touchListener = new View.OnTouchListener(){
    public boolean onTouch(final View v, final MotionEvent motionEvent){
        if(v.getId() == 1){
            v.getParent().requestDisallowInterceptTouchEvent(true);
            switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){
                case MotionEvent.ACTION_UP:
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }
        }
        return false;
    }
};

希望这个答案对你有所帮助。

【讨论】:

    【解决方案2】:
    EditText editText = findViewById(R.id.editText);
    editText.setOnTouchListener(new OnTouchListener() {
                   public boolean onTouch(View view, MotionEvent event) {
                        // TODO Auto-generated method stub
                        if (view.getId() ==R.id.common_remark) {
                            view.getParent().requestDisallowInterceptTouchEvent(true);
                            switch (event.getAction()&MotionEvent.ACTION_MASK){
                            case MotionEvent.ACTION_UP:
                                view.getParent().requestDisallowInterceptTouchEvent(false);
                                break;
                            }
                        }
                        return false;
                    }
            });
    

    并在 xml 中在 EditText 中添加这一行:

    android:scrollbars = "vertical"
    

    【讨论】:

      【解决方案3】:

      添加到编辑文本

       android:inputType="textMultiLine"
      

      【讨论】:

        【解决方案4】:

        在 kotlin 中使用这个

        editText.setOnTouchListener { v, event ->
            v.parent.requestDisallowInterceptTouchEvent(true)
            when (event.action and MotionEvent.ACTION_MASK) {
                MotionEvent.ACTION_UP ->  v.parent.requestDisallowInterceptTouchEvent(false)
            }
            false
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-30
          • 1970-01-01
          • 2013-07-18
          • 2019-03-07
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          相关资源
          最近更新 更多