Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android跑馬燈的實現及問題總結

Android跑馬燈的實現及問題總結

編輯:關於Android編程

 

所謂跑馬燈效果就是當文字超過控件所能容納的空間時,在控件內滾動的效果。

 

顯示跑馬燈效果的前提條件就是你的文本內容要比顯示文本的外部組件長,即外部組件無法完整的顯示內部的文本內容。

TextView設置以下屬性來實現跑馬燈效果:

 

android:singleLine=true
android:ellipsize=marquee
android:focusableInTouchMode=true
android:focusable=true
android:marqueeRepeatLimit=marquee_forever
  

 

但是當需要文字一直滾動時,有可能會出現別的控件獲得焦點的情況。這樣就需要實現自定義控件,然後達到TextView一直處於滾動狀態的效果。

 

package com.xxx.test2;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

	public MyTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	protected void onFocusChanged(boolean focused, int direction,
			Rect previouslyFocusedRect) {
		if (focused)
			super.onFocusChanged(focused, direction, previouslyFocusedRect);
	}

	@Override
	public void onWindowFocusChanged(boolean focused) {
		if (focused)
			super.onWindowFocusChanged(focused);
	}

	@Override
	public boolean isFocused() {
		return true;//一直返回true,假裝這個控件一直獲取著焦點
	}
}
然後在布局中使用自定義的這個控件

 

 

 

如何實現自定義組件參考網址:http://blog.csdn.net/jjwwmlp456/article/details/410766

 

附:http://www.cnblogs.com/Gaojiecai/archive/2013/06/18/3142783.html

 

上面這個鏈接裡討論了下android:clickable=true和(android:focusable=true,android:focusableInTouchMode=true)這兩個屬性的關系。

在TextView類中,有這麼兩行:

 

 boolean clickable = focusable;
 boolean longClickable = focusable;
clickable在初始化時被附上了focusable的值。但是在後面還有一段代碼:

 

 

for (int i = 0; i < n; i++) {
            int attr = a.getIndex(i);

            switch (attr) {
            case com.android.internal.R.styleable.View_focusable:
                focusable = a.getBoolean(attr, focusable);
                break;

            case com.android.internal.R.styleable.View_clickable:
                clickable = a.getBoolean(attr, clickable);
                break;

            case com.android.internal.R.styleable.View_longClickable:
                longClickable = a.getBoolean(attr, longClickable);
                break;
            }
        }
        a.recycle();

        setFocusable(focusable);
        setClickable(clickable);
默認情況下TextView是不可以被點擊的。很多文章都說,在xml文件中配置

 

 

android:clickable=true
便可以被點擊了。

 

但是出現了這種情況:

設置xml中TextView

在MainActivity中測試一下:
package com.xxx.test2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	TextView tv1;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		final TextView tv1 = (TextView) findViewById(R.id.textView1);
		Toast.makeText(MainActivity.this, duang..+tv1.isClickable(), 0).show();
		tv1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Toast.makeText(MainActivity.this, 我被點擊了+tv1.isClickable(), 0).show();
				
			}
		});
	}
}
結果為:duang..false

 

猜測:為TextView定義了點擊事件,當被點擊時,會改變TextView的isClickable的值,但是能否被點擊又決定了是否會產生點擊事件,所以又會有點矛盾。待解決中,希望看到的大神能給解惑。

 

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