編輯:關於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的值,但是能否被點擊又決定了是否會產生點擊事件,所以又會有點矛盾。待解決中,希望看到的大神能給解惑。
一:Android中activity之間的常見跳轉實現 1)startActivity(Intent intent); 2)startActivityForResult(
方法1:使用內部APIs該方法和其他所有內部沒有向外正式公布的APIs一樣存在它自己的風險。原理是通過獲得WindowManager的一個實例來訪問injectKeyEv
前面已經學了activity的一些使用,那麼下面我們進行android中基本的控件的學習和使用。 1.android中的TextView控件 新建一個項目,項目名為UIT
看到這個sweet-alert-dialog很親切,因為前端開發本人用的提示就是這個js插件,java牛人很厲害,直接弄成一個java包插件,Good!下面記錄如何引用到