EditText не прокручивается правильно - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть EditText, который установлен прокрутки по вертикали. Но это не правильно прокручивает. Когда я пытаюсь прокрутить вверх до editText, однако курсор также перемещается вверх и замедляет прокрутку, EditText не прокручивается правильно. Ниже мой код

activity_compiler. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<View
    android:layout_width="48dp"
    android:layout_height="match_parent"
    android:background="@color/gray_light"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<com.example.diplomawork.utils.CodeHighlighterEditText
    android:id="@+id/codeHighlighterEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:background="@null"
    android:fontFamily="@font/muli"
    android:gravity="top|start"
    android:inputType="textMultiLine"
    android:lines="300"
    android:scrollbars="vertical"
    android:text="2"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Класс активности компилятора

class CompilerActivity : MvpAppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_compiler)
    }
}

CodeHighlighterEditText class

class CodeHighlighterEditText (context: Context, val attrs: AttributeSet) : 
AppCompatEditText(context,attrs) {
    var rect = Rect()
    private val paint = Paint()
    val scale = resources.displayMetrics.density

    init {
        paint.style = Paint.Style.STROKE
        paint.color = Color.BLACK
        paint.typeface = Typeface.createFromAsset(context.assets, "muli.ttf")
        val spSize = 18
        val scaledSizeInPixels =
            spSize * resources.displayMetrics.scaledDensity
        paint.textSize = scaledSizeInPixels

    }

    override fun onDraw(canvas: Canvas?) {
        var baseline = baseline
        for (i in 0 until lineCount) {
            incrementPadding(i + 1)
            canvas?.drawText("${i + 1}", rect.left.toFloat(), baseline.toFloat(), paint)
            baseline += lineHeight
        }
        super.onDraw(canvas)
    }

    private fun incrementPadding(i: Int) {
        when {
            i < 10 -> setPadding(16)
            i < 100 -> setPadding(32)
            i < 1000 -> setPadding(48) //Max line = 999
        }
    }

    private fun setPadding(padding: Int) {
        val dpAsPixels = (padding * scale + 0.5f)
        setPadding(dpAsPixels.toInt(), 0, 0, 0)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...