Kotlin 中的自动滚动文本视图
Auto Scrollable Text View in Kotlin
我已经搜索了一段时间了。我有 textView,它是可滚动的。问题是添加文本时它不会滚动。我列出了我所有的代码和照片作为示例。我需要的是在键入文本时自动滚动的 textView。这将是水平的,因为它是一个计算器。
我尝试过使用光标位置、使用 spannable 以及一些我通常会做的事情。然而,这让我感到难过。也许我添加了一些与运动相矛盾的东西。这也在 androidx.constraintlayout.widget.ConstraintLayout
中完成
设计
<HorizontalScrollView
android:id="@+id/scrView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fillViewport="true"
android:overScrollMode="always"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_equation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="8dp"
android:maxLines="1"
android:padding="5dp"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/tv_equation"
android:textAlignment="textEnd"
android:textColor="@color/white"
android:textSize="45sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</HorizontalScrollView>
主要活动
binding.tvEquation.movementMethod = ScrollingMovementMethod()
似乎调用 overScrollMode
时,它应该会自动滚动。也许我遗漏了什么?
android:overScrollMode="always"
所以任何建议都会有所帮助。
改变这个:
<HorizontalScrollView......
<TextView.......
</TextView......
</HorizontalScrollView>
对此:
<EditText
android:id="@+id/tv_equation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="8dp"
android:inputType="text"
android:maxLines="1"
android:minLines="1"
android:isScrollContainer="true"
android:padding="5dp"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/tv_equation"
android:textAlignment="textEnd"
android:textColor="@color/white"
android:textSize="45sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
并在您的代码中添加这一行。
科特林:
binding.tv_equation.movementMethod = ScrollingMovementMethod()
Java:
EditText tv_equation = (EditText)findViewById(R.id.tv_equation);
tv_equation.setMovementMethod(new ScrollingMovementMethod());
您需要的是 EditText 中的选取框行为。
然而 Marquee 是一个 TextView 属性 而不是一个编辑文本。
创建一个编辑文本和文本视图并叠加在另一个之上,
在文本视图上单击隐藏文本视图并显示编辑文本。
有一个可滚动的文本视图
<TextView
android:id = "@+id/text"
android:textSize = "20dp"
android:textAlignment = "center"
android:layout_width = "match_parent"
android:ellipsize = "marquee"
android:fadingEdge = "horizontal"
android:marqueeRepeatLimit = "marquee_forever"
android:scrollHorizontally = "true"
android:textColor = "#ff4500"
android:text = "Simple application that shows how to use marquee, with a long text"
android:layout_height = "wrap_content"
android:singleLine = "true" />
现在创建一个切换功能,例如
text.setVisibility(View.GONE);
editText.setVisibility(View.VISIBLE);
editText.setText(edititemname);
这样会给人一种错觉,即相同的文本在未选中时正在滚动,而在失去焦点时正在滚动。
PS: 添加 editText.setSelection(editText.length())
用于将光标放在末尾
Ps: 如果你只需要一个可滚动的文本视图,文本视图的代码块就足够了
我已经搜索了一段时间了。我有 textView,它是可滚动的。问题是添加文本时它不会滚动。我列出了我所有的代码和照片作为示例。我需要的是在键入文本时自动滚动的 textView。这将是水平的,因为它是一个计算器。
我尝试过使用光标位置、使用 spannable 以及一些我通常会做的事情。然而,这让我感到难过。也许我添加了一些与运动相矛盾的东西。这也在 androidx.constraintlayout.widget.ConstraintLayout
设计
<HorizontalScrollView
android:id="@+id/scrView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fillViewport="true"
android:overScrollMode="always"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_equation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="8dp"
android:maxLines="1"
android:padding="5dp"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/tv_equation"
android:textAlignment="textEnd"
android:textColor="@color/white"
android:textSize="45sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</HorizontalScrollView>
主要活动
binding.tvEquation.movementMethod = ScrollingMovementMethod()
似乎调用 overScrollMode
时,它应该会自动滚动。也许我遗漏了什么?
android:overScrollMode="always"
所以任何建议都会有所帮助。
改变这个:
<HorizontalScrollView......
<TextView.......
</TextView......
</HorizontalScrollView>
对此:
<EditText
android:id="@+id/tv_equation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="8dp"
android:inputType="text"
android:maxLines="1"
android:minLines="1"
android:isScrollContainer="true"
android:padding="5dp"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/tv_equation"
android:textAlignment="textEnd"
android:textColor="@color/white"
android:textSize="45sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
并在您的代码中添加这一行。
科特林:
binding.tv_equation.movementMethod = ScrollingMovementMethod()
Java:
EditText tv_equation = (EditText)findViewById(R.id.tv_equation);
tv_equation.setMovementMethod(new ScrollingMovementMethod());
您需要的是 EditText 中的选取框行为。 然而 Marquee 是一个 TextView 属性 而不是一个编辑文本。
创建一个编辑文本和文本视图并叠加在另一个之上, 在文本视图上单击隐藏文本视图并显示编辑文本。
有一个可滚动的文本视图 <TextView
android:id = "@+id/text"
android:textSize = "20dp"
android:textAlignment = "center"
android:layout_width = "match_parent"
android:ellipsize = "marquee"
android:fadingEdge = "horizontal"
android:marqueeRepeatLimit = "marquee_forever"
android:scrollHorizontally = "true"
android:textColor = "#ff4500"
android:text = "Simple application that shows how to use marquee, with a long text"
android:layout_height = "wrap_content"
android:singleLine = "true" />
现在创建一个切换功能,例如
text.setVisibility(View.GONE);
editText.setVisibility(View.VISIBLE);
editText.setText(edititemname);
这样会给人一种错觉,即相同的文本在未选中时正在滚动,而在失去焦点时正在滚动。
PS: 添加 editText.setSelection(editText.length())
用于将光标放在末尾
Ps: 如果你只需要一个可滚动的文本视图,文本视图的代码块就足够了