android SDK開發 -- TitleBar封裝 (一)?[點擊打開鏈接](http://blog.csdn.net/id19870510/article/details/50386067)
這一篇講述一下TitleBar怎么增加交互
BaseActivity 中的邏輯實現
~~~
private ViewSwitcher[] titleSwitcher;
/**
* 初始化View
*/
protected void findViewById() {
titleSwitcher = new ViewSwitcher[3];
titleSwitcher[0] = (ViewSwitcher) findViewById(R.id.app_title_left_switcher);
titleSwitcher[1] = (ViewSwitcher) findViewById(R.id.app_title_middle_switcher);
titleSwitcher[2] = (ViewSwitcher) findViewById(R.id.app_title_right_switcher);
}
protected void setTitle(TitleRes leftTitle, TitleRes middleTitle, TitleRes rightTitle) {
TitleRes[] reses = new TitleRes[] { leftTitle, middleTitle, rightTitle };
for (int i = 0; i < reses.length; i++) {
TitleRes res = reses[i];
ViewSwitcher switcher = titleSwitcher[i];
if (res == null) {
switcher.setVisibility(View.INVISIBLE);
} else {
switcher.setVisibility(View.VISIBLE);
// 觸發單擊事件的View
View clickView = null;
// 文字
if (res.getType() == 0) {
switcher.setDisplayedChild(0);// 顯示TextView
//
Object resource = res.getResource();
String title = resource instanceof Integer ? getResources().getString((Integer) resource) : String.valueOf(resource);
((TextView) switcher.getChildAt(0)).setText(title);
clickView = switcher.getChildAt(0);
} else {
switcher.setDisplayedChild(1);// 顯示ImageView
//
int imageResource = (Integer) res.getResource();
((ImageView) switcher.getChildAt(1)).setImageResource(imageResource);
clickView = switcher.getChildAt(1);
}
// 設置title的單擊事件
clickView.setOnClickListener(res.getClickListener());
}
}
}
~~~
自雷TitleSampleActivity 調用如下
~~~
@Override
protected void findViewById() {
setContentView(R.layout.title_demo);
super.findViewById();
// setTitle("返回主頁", "這是一個Title", "下一個界面");
TitleRes left = new TitleRes("left", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TitleDemoActivity.this, "click left", Toast.LENGTH_SHORT).show();
//showToast("click left");
}
});
TitleRes middle = new TitleRes("middle", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TitleDemoActivity.this, "click middle", Toast.LENGTH_SHORT).show();
//showToast("click middle");
}
});
TitleRes right = new TitleRes("right", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TitleDemoActivity.this, "click right", Toast.LENGTH_SHORT).show();
//showToast("click right");
}
});
//
setTitle(left, middle, right);
}
~~~
這個時候title三個控件都具備了交互的能力
?
Toast.makeText(TitleDemoActivity.this,"click right",Toast.* LENGTH_SHORT * ).show();
程序中會頻繁的用到 context? Toast等對象
采用Class.this的方式在代碼移植、維護、重構等方面很不友好
另外頻繁調用Toast每次都那么寫的話 麻煩死
所以BaseActivity中新增倆方法
作用于暫且定義為protected? 以后估計還得改
~~~
protected Context getContext() {
??? returnthis;
}
~~~
~~~
protectedvoid showToast(String message) {
??? Toast.*makeText*(getContext(), message,Toast.*LENGTH_SHORT*).show();
}
~~~
這個時候子類調用父類的代碼如下
~~~
TitleRes left =newTitleRes("left",newView.OnClickListener() {
??? @Override
??? publicvoid onClick(View v) {
??????? showToast("click left");//
??? }
});
。。。。中、右略
//
setTitle(left,middle, right);
~~~
- 前言
- Android sdk開發 - 序
- Android sdk開發(一)Application設計
- Android sdk開發(二) Log日志類的設計
- Android SDK開發 (三) App的屬性配置
- android SDK開發-- 功能設計
- android SDK開發 -- TitleBar封裝(一)
- android SDK開發 -- TitleBar封裝(二)
- Android SDK開發 -- TitleBar重構 (代理模式的使用)
- Android SDK開發 -- TitleBar重構 (代理模式-優化)
- android SDK核心功能 -- 消息傳遞與界面刷新
- Android SDK開發 -- TitleBar重構 - 使用策略模式、舍棄代理模式