2014-02-11 38 views
3

我想在文本太長時使用自動滾動TextView。我遵循每個教程或提示貼在這裏stackoverflow(是的,我收到了一堆類似於這個主題,但沒有人修復它)。無法在TextView中自動滾動文本

所以,我有我的活動佈局這樣的:

<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上的文本,它不再有效。它可以做什麼?我有線程(定時器)醒來每50ms更新一個SeekBar和其他兩個TextViews,這可能會阻止一些東西?

+0

你希望它水平或垂直滾動​​? – nKn

+0

水平滾動會更好,但是如果它只能垂直滾動,那就沒問題了 – ferrazrafael

回答

2

TextView處理滾動時有時會變得棘手。你已經設置到您的佈局主要屬性如下:

android:scrollHorizontally="false" 
android:scrollbars="vertical" 
android:gravity="bottom" 

gravity設置爲底部將讓您的滾動條下降到您的TextView每次的底部,你追加一條線。所以只有當你想要那樣才能使用它。

music_name.setMovementMethod(new ScrollingMovementMethod());聲明也是需要的。

這種方式它應該工作。

+0

我改變了我的XML並且不起作用。它只是保留一個靜態文本缺少部分文本。 – ferrazrafael

+0

是否有意使用TextView'singleLine'?如果它只有一行,爲什麼你需要滾動? – nKn

+0

這是因爲最初的想法是創建一個只有一行的水平滾動。但是從XML中刪除它也不能解決問題。 它只是由於重力=「底部」而使文本更改方向,但文本不會自動滾動。 – ferrazrafael

0

您需要使用一些動畫,這樣的事情在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)); 
     } 
    }); 
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"/> 
+0

全文不可見,我的意思是它超過了「...」 –

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 
    } 

}) }