通常情況下我們想實作文字的走馬燈效果需要在xml檔案中這樣設定
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/lyric" />
大家都懂的就不解釋了。
singleLine :boolean型的是否讓文字隻顯示在一行而不是多行顯示
ellipsize:滾動效果,裡面有(none,start,middle,end,marquee),其中none表示正常顯示文字,即使一行顯示不完全,也無任何效果。star,就是假如文字在一行顯示不完全,在開頭顯示...,同理,end一行的最後一個文字後面加...,middle就是所有文字顯示在一行,如果文字太多,在中間加入...。可能我解釋的不清楚,大概就是這樣 讀者可以自己測試一下。至于marquee就是文字走馬燈效果啦。
當然,如果你隻設定了這些文字還是不會滾動的。還要使TextView擷取焦點。
focusable:是否能夠焦點,boolean型的
focusableInTouchMode:boolean型的。
在觸摸模式下是否擷取焦點。
當你設定了這些部署在手機上,很明顯會實作走馬燈效果。效果如下:

可是如果你在這個Activity執行個體中再添加一個編輯框控件,點選編輯框後就會發現走馬燈效果消失了.
就像這樣
這是為什麼呢?
因為點選編輯框,編輯框會擷取螢幕焦點,由于通常情況下螢幕的焦點隻能有一個,TextView失去了焦點,也就不會滾動了。這時候我們要怎麼辦呢?
那就欺騙系統呗。告訴它我們的TextView也是有焦點的。沒錯 兩個焦點。
如何做?我們就建立一個我們自己的TextView呗。
首先我們建立一個名為MyTextView繼承TextView的類,重寫裡面的方法,其中有三個方法是必須的,就像我們總在MainActivity裡面重寫OnCreate方法一樣,作用是什麼 我也不清楚。好奇的同學請百度。哈哈~
我們要知道系統是如何判斷一個控件是否擷取焦點了呢?
public boolean isFocused() {
// TODO Auto-generated method stub
return super.isFocused();
}
就是這個方法。前面說了 我們要欺騙系統 我們的TextViwe是有焦點的。是以我們在這個方法裡面一直return true就好了 哈哈 是不是特流氓。。。
做完了這些别忘記把我們的TextView部署到布局檔案中哦
布局代碼:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:text="@string/lyric" />
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
MainActivity.class
package com.example.textview;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
MyTextView.class
package com.example.textview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.WindowId.FocusObserver;
import android.widget.TextView;
public class MyTextView extends TextView{
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean isFocused() {
// TODO Auto-generated method stub
return true;
}
}
對了 附上效果圖。都看到光标在編輯框了~
以上就是本文的全部内容,希望本文的内容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支援腳本之家!