編輯:關於Android編程
開發這個程序之前先解釋一下,為什麼Toast信息提示框在顯示一定時間後會自動消失?因為在Android系統中有一個Toast隊列,系統會依次從這個隊列中取出一個Toast,並顯示它。在顯示了指定時間之後,便關閉它。那麼可不可以讓Toast信息提示框一直顯示呢?這個要求對於Toast來說有點強人所難了,因為,Toast本身並沒有提供這個功能。那麼怎麼才能讓Toast一直顯示,並在我們的控制之下關閉呢?代碼是死的,人是活的。下面就叫代碼說話:
看一下Toast的show方法的源碼:
public void show() {
if (mNextView == null) {
throw new RuntimeException("setView must have been called");
}
INotificationManager service = getService();
String pkg = mContext.getPackageName();
TN tn = mTN;
tn.mNextView = mNextView;
try {
service.enqueueToast(pkg, tn, mDuration);
} catch (RemoteException e) {
// Empty
}
}
在上面的代碼中Toast已經告訴我們了,它本身並不負責信息提示框的顯示與關閉,它只是將Toast加入到系統的Toast隊列中,再由系統根據Toast隊列來顯示和關閉Toast信息提示框。現在我們可以做一個大膽的推斷,既然Toast的show方法是將Toast放到系統的Toast隊列中,那麼我們就不使用show方法,我們自己來控制Toast的顯示與關閉。
查看Toast類源碼可以找到一個TN類,該類是Toast的一個內嵌類。在TN類中有個show方法,系統是從Toast隊列中獲得Toast對象之後,利用TN對象的show方法顯示Toast再利用TN.hide方法關閉Toast。如果我們能夠獲取TN對象那麼就能控制Toast的顯示與關閉。但TN被聲明成private,外部無法訪問。不過Toast類中有個mTN對象,雖然它不是我public但我們可以通過Java反射技術來訪問該對象。mTN會在創建Toast對象時初始化。所以,只要獲得mTN對象也就獲得了TN對象。下面代碼顯示了一個永不關閉的Toast信息提示框。
Toast toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
//設置Toast的顯示位置
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
try
{
//通過反射技術,從toast對象中獲取mTN對象
Field field = toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
obj = field.get(toast);
//從TN對象中獲得show方法
Method method = obj.getClass().getDeclaredMethod("show", null);
//調用TN對象的show方法來顯示Toast信息提示框
method.invoke(obj, null);
}
catch (Exception e)
{
}
上面代碼先通過事先創建好的Toast對象獲得mTN對象,然後在利用反射技術獲得TN對象的show方法。
關閉Toast的方法和顯示Toast的方法類似,只需要獲得hide方法即可。
Method method = obj.getClass().getDeclaredMethod("hide", null);
method.invoke(obj, null);

Android-PullToRefresh下拉刷新庫基本用法
PullToRefresh是一套實現非常好的下拉刷新庫,它支持: ListView ExpandableListView GridView WebView ScrollV
Android 將Activity及其他類打包成jar包供第三方調用
在開發java工程時,一個項目可能分為多個模塊,為了實現模塊間的解耦和獨立,提高模塊的復用性,通常將項目按模塊分為多個java工程進行開發,最後通過jar包等工
Intent Filter匹配規則
Intent簡介Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根
一起學android之自定義控件顯示點贊用戶並通過用戶名稱進入該用戶主頁的功能
效果圖:以上效果類似於顯示點贊用戶的界面,我們可以通過點擊不同的昵稱進入每個人的個人主頁。 關於公共控件,請點擊文章下方的git地址。 第一步:我們為