`

Android多Activity通用Title

 
阅读更多
先看一下效果图:



要实现在每个页面显示相同的Title,能想到的办法有:
1、创建单独的xml布局文件,在页面主配置文件中用include标签引入,如果要修改内容,可以再代码中获取View,修改内容;
2、用Android提供的Theme(在新建项目时可选),toolbar ,ActionBarActivity可以实现现在流行的material design,不过ActionBarActivity已经被AppCompatActivity取代了;
3、在1的基础上引入面向对象的思想,抽象出基类Activity(Fragment)。

下面记录一下3的实现过程:
1、新建抽象的Activity:
public abstract class BaseActivity extends Activity {

	public static List<WeakReference<BaseActivity>> baseActivityList = new ArrayList<WeakReference<BaseActivity>>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		WeakReference<BaseActivity> ba = new WeakReference<BaseActivity>(this);
		baseActivityList.add(ba);
	}

	@Override
	public void setContentView(int layoutResID) {
		View contentView = LayoutInflater.from(this).inflate(layoutResID, null);
		setContentView(contentView);
	}

	@Override
	public void setContentView(View view) {
		// TODO Auto-generated method stub
		setContentView(view,null);
	}
	
	@Override
	public void setContentView(View view,ViewGroup.LayoutParams lp) {
		boolean hasTitle = hasTitle();
		if(hasTitle){
			int titleLayoutId = getCustomTitleLayoutId();
			requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
			if(lp == null){
				super.setContentView(view);
			}else{
				super.setContentView(view, lp);
			}
			
			Window w = getWindow();
			w.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, titleLayoutId);
			Drawable titleBg = getTitleBg();
			if(titleBg != null){
				ViewGroup titleGroup = (ViewGroup)findViewById(R.id.title_root_group);
				titleGroup.setBackgroundDrawable(titleBg);
			}
			
			initTitle();
		}else{
			requestWindowFeature(Window.FEATURE_NO_TITLE);
			if(lp == null){
				super.setContentView(view);
			}else{
				super.setContentView(view, lp);
			}
		}
		
	}

	/**
	 * 初始化View,分三部分:
	 * Left、Center、Right:可以设置图片、文字、点击事件
	 */
	private void initTitle(){
		titleLeftTV = (TextView)findViewById(R.id.title_left_tv);
		titleLeftIV = (ImageView)findViewById(R.id.title_left_iv);
		titleNameTV = (TextView)findViewById(R.id.title_name_tv);
		titleRightTV = (TextView)findViewById(R.id.title_right_tv);
		titleRightIV = (ImageView)findViewById(R.id.title_right_iv);
//下面三个方法根据自己的要求实现;
		setTitleLeftView();
		setTitleNameView();
		setTitleRightView();
	}
	
	/**
	 * 是否显示Title,子类可以重写;
	 * @return
	 */
	protected boolean hasTitle(){
		return true;
	}
	
	/**
	 * Title布局文件;
	 * @return
	 */
	protected int getCustomTitleLayoutId(){
		return R.layout.custom_common_title;
	}
	
	/**
	 * Title背景,子类可以重写;
	 * @return
	 */
	protected Drawable getTitleBg(){
		return null;
	}
	
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		for (int i = 0; i < baseActivityList.size(); i++) {
			WeakReference<BaseActivity> ba = baseActivityList.get(i);
			if (ba != null && null != ba.get() && ba.get() == this) {
				baseActivityList.remove(i);
			}
		}
	}
}


其他页面Activity只要继承此BaseActivity即可;
  • 大小: 31.7 KB
0
0
分享到:
评论

相关推荐

    CommonTitleBar_historythr_machineugx_android_Android通用tiitlebar_

    总结,创建一个通用的Android Title Bar涉及自定义布局设计、在Activity中应用、根据不同场景调整内容,以及实现沉浸式状态栏效果。通过这些步骤,我们可以为应用程序打造统一且功能丰富的头部导航,提升用户体验。...

    Android 通用标题栏 简单封装实现

    这个标题栏可以在多个Activity或Fragment之间重用,只需简单地调用相应的方法进行配置即可。这不仅可以提高代码质量,还可以减少出错的可能性,使得整个项目的维护变得更加容易。在实际项目中,你可能还需要考虑如何...

    Android 通用菜单栏实现

    在Android应用开发中,创建一个通用菜单栏是提高应用程序用户体验的关键步骤之一。菜单栏通常位于屏幕的顶部或底部,提供导航功能,使用户能够轻松访问各个功能模块。本篇文章将详细探讨如何在Android中实现一个可...

    Android通用代码开发规范

    ### Android通用代码开发规范 #### 一、应用包名 应用包名的命名遵循固定的格式:`com.公司名.应用名`。这样的命名方式有助于组织项目结构,并且能够清晰地展示出应用所属的公司及具体的应用名称。例如,一个属于...

    android_自定义TitleBar

    通过封装这样一个通用TitleBar,开发者可以在多个Activity中复用相同的TitleBar样式,减少代码重复,提高开发效率。同时,由于提供了自定义接口,开发者可以根据实际需求自由调整TitleBar的功能和样式,从而实现更...

    Android 底部导航条

    总之,Android的底部导航栏是构建多页面应用时的重要工具,通过`BottomNavigationView`及其相关配置,开发者可以创建一个通用、可扩展且高度定制的底部导航栏,满足不同应用的需求。在实现过程中,注意保持良好的...

    Android自定义Toolbar

    `Toolbar`是一个可以作为应用程序中任何视图的通用操作条的View组件,它首次在Android 5.0(Lollipop)版本引入。`Toolbar`允许开发者自由定制菜单、图标、标题等元素,使其与应用的视觉风格保持一致。 要使用`...

    android开发新手小技巧

    - **通用属性**:如`android:layout_width`、`android:layout_height`控制视图大小,`android:background`设置背景。 - **EditText属性**:`android:inputType`定义输入类型(如文本、数字等),`android:text`...

    android自定义系列(六)--打造属于自己的头部栏

    android:id="@+id/tv_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="头部栏标题" android:textSize="20sp" android:textColor="@...

    Android中BaseActivity自定义标题栏

    在BaseActivity中,我们首先通过`setContentView`加载自定义的标题栏布局`activity_abstract_title.xml`。这个布局文件应该包含你需要的所有元素,如标题文本、返回按钮、关闭按钮和提交按钮。接下来,通过`...

    android常用控件

    虽然Android官方并未明确指定一套编码规范,但在实际开发过程中,根据社区经验和项目实践,我们可以总结出一些通用的规则。 1. **布局文件命名**: - 布局文件名需采用全小写字母,避免使用大写字母或特殊字符,以...

    Android开发技巧总汇(4).pdf

    11. **非全屏状态下隐藏title栏**:在`AndroidManifest.xml`中,针对指定的Activity设置`android:theme="@android:style/Theme.NoTitleBar"`,可以使其在启动时不显示标题栏。 12. **获取屏幕方向**:通过`...

    Android 开发技巧

    4.4.1、非全屏状态下不显示title标题栏 50 4.4.2、标题栏进度指示器 50 4.4.3、titleBar 高级实现方法(更美观) 51 4.4.4、获取标题栏和状态栏高度 57 4.4.5、标题栏显示简单的进度框 57 4.5、MENU 58 4.5.1、简单的...

    自定义标题

    ActionBar是Android 3.0及更高版本中的一个组件,而Toolbar则在Android 5.0(API级别21)引入,作为更通用的视图,可以替代ActionBar使用。无论选择哪个,自定义标题栏的基本步骤大致相同: 1. **创建布局文件**:...

    android编码规范[归纳].pdf

    虽然Android官方没有提供正式的编码规范,但开发者社区已经形成了一些通用的约定。以下是一些主要的规范点: 1. **布局文件命名**:布局文件的名称应全部使用小写字母,避免使用缩写,且使用下划线分隔语义单词,如...

    android自定义View—顶部导航栏

    标题中的"android自定义View—顶部导航栏"正是指这个过程,它旨在创建一个可重用的组件,用于在多个Activity之间提供一致的导航体验。 首先,我们从基础开始,理解Android中的自定义View。自定义View是扩展系统提供...

    ListView【通用】SimpleAdapter适配器

    本篇文章将详细讲解如何在Android应用中使用ListView和SimpleAdapter来构建一个通用的数据展示功能。 首先,理解ListView的核心概念。ListView通过适配器(Adapter)与数据源进行绑定,适配器的作用是将数据转化为...

    MonoAndroid:用C#编写自定义通用BaseAdapter

    本话题将深入探讨如何使用C#编写自定义的通用BaseAdapter,以便更有效地生成ListView组件。ListView是Android中一个非常重要的控件,常用于展示大量数据集合,而BaseAdapter则是连接数据源与ListView的关键桥梁。 ...

    Android 组合控件实现布局的复用的方法

    总结,Android中组合控件实现布局复用的方法主要分为两步:一是创建自定义布局文件,定义通用的UI结构;二是创建自定义View类,解析并应用自定义属性,处理布局内的交互逻辑。通过这种方式,我们可以创建出可复用的...

Global site tag (gtag.js) - Google Analytics