java - 基于EditText输入实现Android TextView的textMultiline

标签 java android textview multiline

基本上,我有一个应用程序,用户在 EditText 字段中输入的内容就是位图上显示为 TextView 中的文本的内容。效果很好。您可以根据输入实时更新 TextView 文本。我只是不明白为什么它在按回车键后不接受多行。我的代码可能有什么问题?

我添加了以下重要的 XML 标记:

android:singleLine="false"
android:lines="20"
android:inputType="textMultiLine"

以下是我的 EditText XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:orientation="vertical"
    android:id="@+id/layout">

    <EditText
        android:id="@+id/edtextDesigner"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:background="@drawable/rounded_corner"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:typeface="sans"
        android:fontFamily="sans-serif-light"
        android:textSize="18sp"
        android:textColor="#000000"
        android:padding="10dp"
        android:alpha="0.5"
        android:singleLine="false"
        android:lines="20"
        android:inputType="textMultiLine"
        android:layout_below="@+id/toggleText"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:visibility="gone" />

    <TextView
        android:id="@+id/textDesigner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:typeface="sans"
        android:text=""
        android:fontFamily="sans-serif-bold"
        android:textSize="48sp"
        android:textColor="#555555"
        android:visibility="gone"/>

</RelativeLayout>

以下是按下按钮后调用的函数;该函数打开 EditText 字段,除此之外:

public void CustomText(View view){
        if (tobt_Text.getVisibility() != View.VISIBLE){
            tobt_Text.setVisibility(View.VISIBLE);
            text_View.setVisibility(View.VISIBLE);
            edit_View.setOnKeyListener(new View.OnKeyListener() {

                // Sets max lines to 3
                @Override
                public boolean onKey(View view, int keyCode, KeyEvent event) {

                    if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {

                        if (((EditText) view).getLineCount() >= 3)
                            return true;
                    }

                    return false;
                }
            });
            tobt_Text.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (tobt_Text.isChecked()) {
                        edit_View.setVisibility(View.VISIBLE);
                        edit_View.bringToFront();
                    } else{
                        edit_View.setVisibility(View.GONE);
                        if (text_View.length() < 1)
                            tobt_Text.setVisibility(View.GONE);
                    }
                }
            });
            edit_View.addTextChangedListener(passwordWatcher);
            edit_View.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
            text_View.setOnTouchListener(new View.OnTouchListener() {
                int initialX = 0;
                int initialY = 0;

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getActionMasked()) {
                        case MotionEvent.ACTION_DOWN:
                            initialX = (int) event.getX();
                            initialY = (int) event.getY();
                            break;
                        case MotionEvent.ACTION_MOVE:
                            int currentX = (int) event.getX();
                            int currentY = (int) event.getY();
                            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) text_View.getLayoutParams();
                            int left = lp.leftMargin + (currentX - initialX);
                            int top = lp.topMargin + (currentY - initialY);
                            int right = lp.rightMargin - (currentX - initialX);
                            int bottom = lp.bottomMargin - (currentY - initialY);

                            lp.rightMargin = right;
                            lp.leftMargin = left;
                            lp.bottomMargin = bottom;
                            lp.topMargin = top;

                            text_View.setLayoutParams(lp);
                            break;
                        default:
                            break;
                    }
                    return true;
                }
            });
        }
    }

此函数根据输入更新文本:

    private final TextWatcher passwordWatcher = new TextWatcher() {
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            text_View.setVisibility(View.VISIBLE);
        }

        public void afterTextChanged(Editable s) {
            if (s.length() == 0) {
                text_View.setVisibility(View.GONE);
            } else{
                text_View.setText(edit_View.getText());
            }
        }

    };

最佳答案

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

关于java - 基于EditText输入实现Android TextView的textMultiline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34173962/

相关文章:

Java:创建多个(重复的)按钮执行相同的操作但对自己执行

android - Dagger2 在应用 ProGuard 规则后提示

android - 如何在 Android TextView 中使用土耳其语字符(如 'ş ç ı ö')?

java - 如何从 Netbeans 上的 Servlet 中的项目类路径获取图像

java - 在 Jersey ResourceFilterFactory 中获取实际参数值

Android:无法包含 facebook sdk 库项目

android - 如何获取引用属性的值

android - 有谁知道如何使用 RecyclerView 进行流式布局?

android - 如何确定要放置在 TextView 中的文本是否适合单行

java - API 是否应该抛出 NullPointerExceptions