文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
TitleBar 封装(二)
这一篇讲述一下 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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论