android 快速开发(三)巧用公共标题栏:避免每次activity都得写标题栏
2016-01-07 16:00
525 查看
巧用公共标题栏:避免每次activity都得写标题栏
注:采用父类继承法避免每次建activity都得include标题栏并初始化标题栏各个操作先看下MainActivity代码和xml:
package com.yqy.yqy_commontitlebar; import android.view.View.OnClickListener; public class MainActivity extends CommonActivity { @Override public void init() { setTitleAndContentLayoutId("首页", R.layout.activity_main); } @Override public OnClickListener getBackOnClickLisener() { return null; } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
代码简洁,并且有设置标题栏文字、标题栏以为的布局和随心所欲的返回事件
这些都归功于CommonActivity:
package com.yqy.yqy_commontitlebar; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.TextView; public abstract class CommonActivity extends FragmentActivity { private TextView leftTv, centerTv, rightTv; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.common_title_bar); leftTv = (TextView) findViewById(R.id.leftTv); centerTv = (TextView) findViewById(R.id.centerTv); rightTv = (TextView) findViewById(R.id.rightTv); if (getBackOnClickLisener() == null) { leftTv.setOnClickListener(new BackOnClickLisener()); } else { leftTv.setOnClickListener(getBackOnClickLisener()); } init(); } /** * 设置标题和主布局 * @author yqy * @date 2016-1-7 下午3:44:55 * @param title * @param layoutId */ public void setTitleAndContentLayoutId(String title, int layoutId) { getLayoutInflater().inflate(layoutId, (ViewGroup) centerTv.getParent().getParent()); centerTv.setText(title); } public abstract void init(); public abstract OnClickListener getBackOnClickLisener(); class BackOnClickLisener implements OnClickListener { @Override public void onClick(View arg0) { finish(); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { leftTv.performClick(); return true; } return super.onKeyDown(keyCode, event); } }
OnCreare方法初始化标题栏布局和点击事件
setTitleAndContentLayoutId(String title, int layoutId)用来设置标题栏的标题文字和主要布局
有两个方法前面带有 public abstract 修饰符目的是让子类复写这些 父类调用
标题栏布局贴上:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="48dp" > <TextView android:id="@+id/leftTv" android:layout_width="40dp" android:layout_height="35dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:gravity="center" android:text="返回" /> <TextView android:id="@+id/centerTv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="标题" android:textSize="20sp" /> <TextView android:id="@+id/rightTv" android:layout_width="40dp" android:layout_height="35dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:gravity="center" android:text="编辑" /> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@android:color/background_dark"/> </LinearLayout>
以上的例子虽然都是文字的按钮 根据自己的需要稍加改动就可以
最后大喊一声:开源万岁!
相关文章推荐
- Android 6.0 新特性
- Android RecyclerView 的基本使用
- android中DatePickerDialog只显示年月
- Android 串口读取设备相关知识。。总结比较乱,部分转载(未完)
- 简析Android内存泄漏
- Android Handler使用Message的一个注意事项
- Android:No permission to write APN settings(沒有写入 APN 设置的权限)
- [转]Try Cloud Messaging for Android
- Android 实例:使用Android 里的intent
- Android Drawer抽屉布局的实现
- OpenCV for Android Studio 学习笔记(一):NDK及OpenCV的安装配置
- Android DrawerLayout 高仿QQ5.2双向侧滑菜单
- Android系统之路(初识MTK) ------ 内置三方apk到Rom可移动/可卸载
- Import adt 项目到android studio解决的问题总结
- RichEditor for Android 是 Android 平台下一个所见即所得的文本编辑器控件。
- android studio preview 出现 Rendering Problems的解决方法
- Android app native代码性能分析
- Android 实例:在Activity 之间传递数据的intent
- Android开源类库和工具集合
- Android Espresso单元测试