Android中title的管理

常见的Android应用每个Activity或者Fragment都会带有一个Title栏。最普通的就是每个Activity的布局文件中都写一个title。但是这样管理起来比较麻烦,因为每个activity的title栏其实看起来都差不多,基本都包含有返回功能,一个textview描述当前页面,最右侧会是一个更多或者搜索之类的功能按钮。这样我们其实可以使用一个通用的布局,在所有的activity的父类中直接控制title的样式。

1.首先是BaseActivity作为所有Activity的父类

public abstract class BaseActivity extends Activity  {

    public LayoutInflater inflater;
    public Resources mResources;
    public Context mContext;
    public View rootView;
    private View titleView;
    private LinearLayout.LayoutParams params;
    public int layoutId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        inflater = getLayoutInflater();
        layoutId = getContentView();
        rootView = inflater.inflate(layoutId, null);
        mContext = this;
        mResources = mContext.getResources();
        params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) mResources.getDimension(R.dimen.common_title_height));
        setContentView(rootView);
        findViewById();
        initTitleView();
        initData();
    }

    private void initTitleView() {
        titleView = TitleManager.getInstance(this).initTitleView(layoutId);
        ((ViewGroup) rootView).addView(titleView, 0, params);
    }

    /**
     * 绑定控件id
     */
    protected abstract void findViewById();

    protected abstract void initData();

    /**
     * 初始化控件
     */
    protected abstract int getContentView();

}

2.接着是titlemanager类

public class TitleManager implements View.OnClickListener {

    private static TitleManager uniqueInstance = null;
    private Activity context;
    private View titleView;
    private LayoutInflater inflater;

    private TitleManager(Activity context) {
        this.context = context;
        inflater = context.getLayoutInflater();
    }

    public static TitleManager getInstance(Activity context) {
        if (uniqueInstance == null) {
            uniqueInstance = new TitleManager(context);
        }
        return uniqueInstance;
    }

    public ImageView mCommonTitleLeft;
    public TextView mCityNameTextView;
    public TextView mTitleTextView;
    public ImageView mSearch;
    public ImageView mFavorite;
    public ImageView mShare;

    public View initTitleView(int layoutId) {

        titleView = inflater.inflate(R.layout.view_product_common_title, null);
        mCommonTitleLeft = (ImageView) titleView.findViewById(R.id.common_title_left);
        mCommonTitleLeft.setOnClickListener(this);
        mCityNameTextView = (TextView) titleView.findViewById(R.id.activity_product_home_left);
        mCityNameTextView.setOnClickListener(this);
        mTitleTextView = (TextView) titleView.findViewById(R.id.common_title_center);
        mSearch = (ImageView) titleView.findViewById(R.id.common_title_search);
        mSearch.setOnClickListener(this);
        mFavorite = (ImageView) titleView.findViewById(R.id.details_product_favorite_img);
        mFavorite.setOnClickListener(this);
        mShare = (ImageView) titleView.findViewById(R.id.details_product_shear_img);
        mShare.setOnClickListener(this);

        switch (layoutId) {
            case R.layout.main:
                mCityNameTextView.setVisibility(View.VISIBLE);
                mSearch.setVisibility(View.VISIBLE);
                mTitleTextView.setText(R.string.title_activity_main);
                break;
            case R.layout.main1:
                mCommonTitleLeft.setVisibility(View.VISIBLE);
                mTitleTextView.setText(R.string.title_activity_main1);
                break;
            case R.layout.main2:
                mCommonTitleLeft.setVisibility(View.VISIBLE);
                mFavorite.setVisibility(View.VISIBLE);
                mTitleTextView.setText(R.string.title_activity_main2);
                break;
            case R.layout.main3:
                mCommonTitleLeft.setVisibility(View.VISIBLE);
                mShare.setVisibility(View.VISIBLE);
                mTitleTextView.setText(R.string.title_activity_main3);
                break;

            default:
                mCityNameTextView.setVisibility(View.GONE);
                mSearch.setVisibility(View.GONE);
                mCommonTitleLeft.setVisibility(View.VISIBLE);
                mFavorite.setVisibility(View.GONE);
                mShare.setVisibility(View.GONE);
                break;
        }
        return titleView;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.common_title_left:
                context.finish();
                break;
            case R.id.common_title_search:
                Toast.makeText(context, "search", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

3.Activity和xml布局文件就不给了,在后面直接放上demo,里面包含的整个工程。

效果基本是这样的:

下载地址:http://www.oschina.net/action/code/download?code=45216&id=63735

时间: 2024-10-25 09:04:52

Android中title的管理的相关文章

Android中使用SQLiteOpenHelper管理SD卡中的数据库

使用Android中自带的SQLiteOpenHelper可以完成数据库的创建与管理,但有两点局限: (1)数据库创建在内存卡中,大小受限,创建位置位于/data/data/应用程序名/databases中(可使用Eclispe的DDMS查看). (2)如果无法获取Root权限,则无法直接查看创建的数据库. 鉴于上述限制及实际需要,打算使用SQLiteOpenHelper管理SD卡上的数据库,通过研究SQLiteOpenHelper的源码,发现其创建或打开数据库的代码位于getWritableD

Android中的权限管理(基于Permission ProtectionLevel)

1.什么是protectionlevel呢? 我们经常在AndroidManifest中使用权限,如果我们想让应用程序可以发短信,那么应该这样写: <uses-permission android:name="android.permission.SEND_SMS" /> 那么这个权限的定义是在哪里定义的呢?如下: frameworks/base/core/res/AndroidManifest.xml <permission android:name="a

Android中的内存管理机制以及正确的使用方式

概述 从操作系统的角度来说,内存就是一块数据存储区域,属于可被操作系统调度的资源.现代多任务(进程)的操作系统中,内存管理尤为重要,操作系统需要为每一个进程合理的分配内存资源,所以可以从两方面来理解操作系统的内存管理机制. 第一:分配机制.为每一个进程分配一个合理的内存大小,保证每一个进程能够正常的运行,不至于内存不够使用或者每个进程占用太多的内存. 第二:回收机制.在系统内存不足打的时候,需要有一个合理的回收再分配的机制,以保证新的进程可以正常运行.回收的时候就要杀死那些正在占有内存的进程,操

在Android中查看和管理sqlite数据库

http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html 在Android中查看和管理sqlite数据库 在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDM

Android中的权限管理(基于uid gid gids setUid)

我们首先来说一下传统的Linux基于uid,gid的权限管理机制: 1.用户的uid gid gids: Ubuntu操作系统当前登陆的用户是jltxgcy,那么该用户的uid为jltxgcy,gid也是jltxgcy,那么gids怎么查看呢? 答案是使用命令:cat /etc/group | grep jltxgcy.如下图: 用户的gids的名字为adm,dialout,cdrom,plugdev,lpadmin,admin,sambashare.此本分请参考linux用户组./etc/gr

【转】Android中的内存管理--不错不错,避免使用枚举类型

原文网址:http://android-performance.com/android/2014/02/17/android-manage-memory.html 本文内容翻译自:http://developer.android.com/training/articles/memory.html 随机存取存储器(RAM)再任何软件开发环境中都是宝贵的资源,但是在移动操作系统中,内存资源更为宝贵,使用时也会收到限制.虽然Android的Dalvik虚拟机有运行时的垃圾回收机制,但是这不意味着你的A

android中title样式问题

============问题描述============ 要在title栏里设置一个button,新建了title.xml,也在OnCreate方法里调用了requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.activity_main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_btn); 但是出错,

Android实战技巧之三十二:Android Studio中的源代码管理

Android Studio最近经过了两次升级到了Android Studio 1.2.1.1, 用起来是越来越顺手了.AS中加入了主流的源码管理工具,让开发者不用离开AS就可以提交和管理代码. 下面就演示一下在AS中使用git管理代码. 选择要提交的代码 右键->commit 编写commit message 可以选择commit and push一起完成提交的动作 确认后push 查看提交历史和对比文件 总结: 玩git的都知道在命令行下有些版本历史信息的显示是不方便的,我们需要借助gitk

android中常用的布局管理器

Android中的几种常用的布局,主要介绍内容有: View视图 RelativeLayout    相对布局管理器 LinearLayout     线性布局管理器 FrameLayout     真布局管理器 TableLayout     表格布局管理器 GridLayout     网格布局管理器 (1) View在XML文件中的常用属性定义: layout_margin:指定该视图与周围视图之间的空白距离(包括上下左右),(可分别写成layout_marginTop.layout_ma