首页 > 解决方案 > 错误的行数EditText

问题描述

我正在尝试创建一个简单的系统,用于通过 TextView 布局显示编辑文本中的行数。不幸的是,当我显示布局时,行数是根据编辑文本的旧尺寸而不是新尺寸计算的,这会导致行数错误。


我的 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:background="@android:color/white"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/textView"
                android:layout_width="50dp"
                android:layout_height="match_parent"
                android:background="@color/grey100"
                android:textSize="18sp"
                android:visibility="gone"
                android:textColor="@color/black"/>

            <EditText
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/white"
                android:textSize="18sp"
                android:layout_toEndOf="@id/textView"
                android:gravity="start|top"
                android:inputType="textMultiLine" />

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

我的主要活动:

public class MainActivity extends AppCompatActivity {

    private EditText editText;
    private TextView textView;
    private int lineNumber;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        editText = findViewById(R.id.editText);

        editText.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");

        showLine();
    }

    private void showLine() {
        editText.post(new Runnable() {
            @Override
            public void run() {
                textView.setVisibility(View.VISIBLE);
                editText.invalidate();
                editText.requestLayout();
                lineNumber = editText.getLineCount();
                StringBuilder text = new StringBuilder();

                for (int i = 0; i < lineNumber; i ++)
                    text.append(i+1).append("\n");

                textView.setText(text.toString());
            }
        });
    }
}

标签: javaandroidandroid-studiotextviewandroid-edittext

解决方案


推荐阅读