当我的文字太长时,我正在尝试自动滚动TextView。我遵循了stackoverflow上发布的每个教程或提示(是的,我引用了一系列类似于此的主题,但没有人修复它。)
所以我有这样的活动布局:
<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="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
....
<TextView
android:id="@+id/music_name"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:gravity="center"
android:text="Music Name"
android:textSize="24sp"
android:layout_centerHorizontal="true"
android:singleLine="true"
android:scrollHorizontally="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever" />
....
</RelativeLayout>
在OnCreate()中,我这样做:
music_name.setSelected(true);
music_name.setMovementMethod(new ScrollingMovementMethod());
music_name是TextView。
所以即使我的TextView也不会滚动。可能有什么不对?
编辑[新]:我注意到它只是第一次有效。其他时候我更改TextView上的文本它不再起作用。这可能是做什么的?我有线程(Timer)每隔50ms唤醒一次,以更新SeekBar和其他两个TextView,这可能会阻塞一些东西?
答案 0 :(得分:2)
TextView
有时会变得棘手。您要在布局中设置的主要属性如下:
android:scrollHorizontally="false"
android:scrollbars="vertical"
android:gravity="bottom"
设置为底部的gravity
会在每次附加一行时使滚动条下降到TextView
的底部。所以只有在你想要它的时候才使用它。
还需要music_name.setMovementMethod(new ScrollingMovementMethod());
语句。
这种方式应该可行。
答案 1 :(得分:0)
您需要使用一些动画,例如res中的anim文件夹中的scroll_textview_animation.xml:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXDelta="200"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="infinite"
android:repeatMode="restart"
android:toXDelta="-200" />
和onCreate或设置文本后:
music_name.startAnimation((Animation)AnimationUtils.loadAnimation(Context,R.anim.scroll_textview_animation));
或者你可以点击开始动画:
music_name.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
music_name.startAnimation((Animation)AnimationUtils.loadAnimation(Context,R.anim.scroll_textview_animation));
}
});
答案 2 :(得分:0)
<TextView
android:id="@+id/mytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="very long text to srollll abcdefghijklmnopqrstdaghlfj'ogjpsroshsrfjhrdjdjkdjdkjdk"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"/>
答案 3 :(得分:0)
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
定义addTextChangedListener
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//some code here
ScrollView scrollView1 = (ScrollView) findViewById(R.id.scrollView1);
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
scrollView1.fullScroll(ScrollView.FOCUS_DOWN);
// you can add a toast or whatever you want here
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
//override stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
//override stub
}
}) }