Android TextSwitcher

分享到:

TextSwitcher控件用来实现一组文字集合的切换效果每次显示一个TextView对像,类似之前讲过的ImageSwitcher。TextSwitcher继承自ViewSwitcher因此它包含的子View就是TextView,同时也继承了ViewAnimator类,所以在多个TextView切换的时候可以设置动画效果(例如渐进渐出)。接下来通过一个例子说明TextSwitcher的基本原理,在这个例子中每点一次Button切换一个TextView,效果如下图所示:

TextSwitcher实例
TextSwitcher实例

XML布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

         <Button
          android:id="@+id/next"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="下一个TextView" />

         <TextSwitcher android:id="@+id/switcher"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

</LinearLayout>

Activity文件源码:

package com.my.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.ViewSwitcher.ViewFactory;

public class TextSwitcherActivity extends Activity implements View.OnClickListener, ViewFactory {
         private TextSwitcher textSwitcher;
         private int mCounter = 0;
         @Override
          protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_text_switcher);

          textSwitcher = (TextSwitcher) findViewById(R.id.switcher);
          //为ViewSwitcher设置ViewFactory工厂          
          textSwitcher.setFactory(this);
          
          //设置切换动画效果         
          Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
          Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
          textSwitcher.setInAnimation(in);
          textSwitcher.setOutAnimation(out);
          Button nextButton = (Button) findViewById(R.id.next);
          nextButton.setOnClickListener(this);
          updateCounter();
          }

         public void onClick(View v) {
          mCounter++;
          updateCounter();
          }

         private void updateCounter() {
          //每执行一次setText方法就会切换一次TextView
          textSwitcher.setText(String.valueOf(mCounter));
          }
         
         //可以在此方法中设置TextView的具体样式,如字体,字号,颜色等参数
         public View makeView() {
          TextView t = new TextView(this);
          t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
          t.setTextSize(40);
          return t;
          }
}

TextSwitcher总结:

(1) 首先Activity要实现ViewFactory接口,为switcher指定ViewSwitcher.ViewFactory工厂,该工厂会产生出转换时需要的View 
  如本例代码:textSwitcher.setFactory(this); 
(2)为TextSwitcher设定显示的内容,该方法执行,就会切换到下一个TextView 
 如本例代码: textSwitcher.setText(String.valueOf(mCounter));

如果想在代码中改变默认字体,颜色等属性就必须实现ViewSwitcher.ViewFactory中的makeView()方法 
// 重写 ViewSwitcher.ViewFactory 的 makeView()方法,返回一个 View,在TextSwitcher切换时使用 ,如本例代码:
@Override 
public View makeView() { 
TextView textView = new TextView(this); 
textView.setTextSize(40); 
return textView; 


最后整理了一些TextSwitcher常用方法,仅供参考:

public void addView (View child, int index, ViewGroup.LayoutParams params)
根据指定的布局参数新增一个子视图
参数: child 新增的子视图,index 新增子视图的位置,params 新增子视图的布局参数
抛出异常 IllegalArgumentException       当子视图不是一个TextView实例时
public void setCurrentText (CharSequence text)
设置当前显示的文本视图的文字内容。非动画方式显示。
参数 text 需要显示的新文本内容
public void setText (CharSequence text)
设置下一视图的文本内容并切换到下一视图。可以动画的退出当前文本内容,显示下一文本内容。
参数 text 需要显示的新文本内容
昵    称:
验证码:

相关文档:

Android控件
Android基础知识
Android组件
Android实例