Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android:TextView實現文字走馬燈效果(欺騙系統獲取持久的焦點)

android:TextView實現文字走馬燈效果(欺騙系統獲取持久的焦點)

編輯:關於android開發

android:TextView實現文字走馬燈效果(欺騙系統獲取持久的焦點)


通常情況下我們想實現文字的走馬燈效果需要在xml文件中這樣設置

  <textview 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"></textview>

大家都懂的就不解釋了。

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部署到布局文件中哦

布局代碼:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">

    <com.example.textview.mytextview android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:singleline="true" android:text="@string/lyric">

    <edittext android:layout_width="fill_parent" android:layout_height="wrap_content">

</edittext></com.example.textview.mytextview></linearlayout>

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;
	}
	
}

對了 附上效果圖。都看到光標在編輯框了~

 

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved