随着大众口味的不断提高,对app要的开发的要求也不断提高,开发人员们要在app上展示的东西安也越来越多,android早期的一些控件慢慢的不不能满足开发的要求了,比如TitleBar的应用的就没有原来的那么多了,后来,谷歌推出了ActionBar,再后来又推出了ToolBar.来满足日益增加的开发需求。

  本文还是为了复习原来的一些技术,至于新的技术,其实道理都是一个样的,掌握一些关键的地方,很容易就弄明白。

  下面,我们说一下,如何自定义一个TitleBar,来实现一些功能:1.可以在任一要用到此统一样式的TitleBar的Activity中,设置TitleBar了不同标题。2.在不同标题中,依据需求,显示后退按钮。3.在不同activity中,依据需求,设置titleBar左侧展示图片,文字,并实现点击执行动作的功能。

  最终要实现的样示:

  特点:把TitleBarActiviti.class放在一个util文件夹中,哪里用到,直接在个xml布局文件里如本类中一样引用(像用TextView一样去用就行了。)。可以设置左侧后退不显示,右侧刷新不显示。至于titleBar的样式,大家完全可以自己设置。

  

这里,在退只是给后退控件变下着色,不做太深的说明。刷新也只是在log里打下日志,有兴趣的小伙伴可以自己去扩展下功能。

废话不多说,直接开干:我理解的安卓开发,就是种萝卜,挖个坑,放个萝卜。坑就是要一些控件了,萝卜就是不管哪里来的经过怎么处理后的数据。

一、挖坑:

  在layout布局文件里编写TitleBar的布局文件。

activity_titlebar.xml

 <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="48dp"
android:gravity="center_horizontal"
android:background="#ffffff"> <View
android:id="@+id/view_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="#0000ff" /> <RelativeLayout
android:id="@+id/rel_titlebar"
android:layout_width="match_parent"
android:layout_height="match_parent" > <TextView
android:id="@+id/tv_back"
android:layout_width="45dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:background="#66ff0000"
android:gravity="center"
android:focusable="true"
android:clickable="true"
android:text="后退"
android:visibility="invisible" /> <View
android:id="@+id/view_left"
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_toRightOf="@id/tv_back"
android:background="#6600ff00"
android:visibility="invisible" /> <TextView
android:id="@+id/tv_other"
android:layout_width="45dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="#66ff0000"
android:gravity="center"
android:text="刷新"
android:focusable="true"
android:clickable="true"
android:visibility="invisible" /> <View
android:id="@+id/view_right"
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/tv_other"
android:background="#6600ff00"
android:visibility="invisible" /> <TextView
android:id="@+id/tv_title_name"
android:layout_width="45dp"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/view_right"
android:layout_toRightOf="@id/view_left"
android:background="#6600ff00"
android:gravity="center"
android:text="Title_Name" />
</RelativeLayout> </RelativeLayout>

二、种萝卜(编写TitileBar类)
TtitleBarActivity.class

 package com.example.ttilebardemo;

 import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast; public class TitleBarActivity extends RelativeLayout implements OnClickListener { private Context mContext;
private View left, bottom, right;
private TextView backTextView, titleName, refersh;
private OnClickListener onClickListener;
private boolean canBack = false; public TitleBarActivity(Context context) {
this(context, null); } public TitleBarActivity(Context context, AttributeSet attr) {
super(context, attr);
mContext = context;
init();
} private void init() {
LayoutInflater.from(mContext).inflate(R.layout.activity_titlebar, this, true);
// 初始化view
left = findViewById(R.id.view_left);
bottom = findViewById(R.id.view_line);
right = findViewById(R.id.view_right);
// 初始化textview
backTextView = (TextView) findViewById(R.id.tv_back);
backTextView.setOnClickListener(this);
titleName = (TextView) findViewById(R.id.tv_title_name);
refersh = (TextView) findViewById(R.id.tv_other); } /**
* 设置titleBar的名字
*/
public void setTitleName(String name) {
titleName.setText(name);
} /**
* 设置titleBar左侧可见性
*/
public void setBackVisible() {
backTextView.setVisibility(View.VISIBLE);
left.setVisibility(View.VISIBLE); } /**
* 设置右侧字体可见
*/
public void setRefeshVisible() {
refersh.setVisibility(View.VISIBLE);
right.setVisibility(View.VISIBLE);
}
/**
* 设置左侧刷新的监听
*/
public void setRefreshListener(OnClickListener onRefresh , boolean canBack){
refersh.setOnClickListener(onRefresh);
this.canBack = canBack;
} /**
* 设左边的按钮的点击事件。
*/ @Override
public void onClick(View v) {
if(v.getId() == R.id.tv_back && backTextView.isShown() && canBack){
backTextView.setBackgroundColor(Color.GREEN);
} } }

好了,titleBar已经定义完成,下面就开始 使用了。

三、在使用类的xml布局文件中引用Titlebar

activity_main.xml

 <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:gravity="center_horizontal"
android:background="#e7e7e7" > <com.example.ttilebardemo.TitleBarActivity
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</com.example.ttilebardemo.TitleBarActivity> <TextView
android:id="@+id/tv_haha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
android:layout_below="@id/title_bar"
android:text="你好,titleBar" /> </RelativeLayout>

四、在代码中对Titlebar依据需求进行编写。

 package com.example.ttilebardemo;

 import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
private TextView tvHa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
tvHa = (TextView) findViewById(R.id.tv_haha);
TitleBarActivity titleBar = (TitleBarActivity) findViewById(R.id.title_bar);
titleBar.setBackVisible();
titleBar.setTitleName("在窗口设置");
titleBar.setRefeshVisible(); titleBar.setRefreshListener(new OnClickListener() { public void onClick(View v) {
Log.d("引用页面::::::", "kwg kwg ........");
}
},true);
}
}

好了,就这样吧。

android-oldman之TitleBar的更多相关文章

  1. android SDK开发 -- TitleBar封装(一)

    假设app的title 统一的都是这种左中右结构的 代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  2. android 自定义标题栏 titleBar自定义

    在value文件夹下添加style.xml <?xml version="1.0" encoding="utf-8"?> <resources ...

  3. Android 自定义View 三板斧之二——组合现有控件

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现 ...

  4. android 多级下拉菜单实现教程

    原创,如转载请标明链接:http://blog.csdn.net/q610098308/article/details/50333387 很多App,都有二级菜单出现,但android 本身实现的菜单 ...

  5. android L 新控件侧滑菜单DrawerLayout 使用教程

    介绍 drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产 ...

  6. Android绘制优化(二)布局优化

    前言 我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升.当然这只是布局优化的一方面,那么如何来进行布局的分析和优化呢?本篇文章会给你一个满意 ...

  7. Android: 背景图片平铺要这么干

    <?xml version="1.0" encoding="utf-8"?>  <bitmap xmlns:android="htt ...

  8. 自定义标签+阻尼动画+圆角图片+titleBar随滑动渐隐和显示

    写这个小Demo,也是因为刚好手里没什么事然后看到很多朋友还在好奇这个阻尼界面效果,还有自定义标签,其实这个标签因为现在Google已经有推出更好使用的东西可以替代,那就是“FlexboxLayout ...

  9. android dialog 筛选列表

    1.效果图 2. 布局文件 1)显示筛选的标题 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  10. android datepicker timepicker简单用法

    1.效果图 2. xml布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

随机推荐

  1. Java Web之JavaBean

    一.什么是javaBean javaBean是一个遵循特定写法的java类,通常具有如下的特点: 这个java类必须具有一个无参的构造函数. 属性必须私有化. 私有化的属性必须通过public类型的方 ...

  2. 在ionic/cordova中使用极光推送插件(jpush)

    Stpe1:创建一个项目(此处使用的是tab类型的项目,创建方式可参照我前一篇如何离线创建Ionic1项目) Stpe2:修改项目信息 打开[config.xml]修改下图内容:

  3. 【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)

    下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程.这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端. 这里涉及到了编写代码,因此要 搭建unix网络编程环境 unix系 ...

  4. Eclipse右下角一直提示Computing additional info解决办法

    今天不知道按了什么,发现Eclipse右下角一直提示computing additional info,打开progress,里面同时有好几条一样的信息,但是一直也执行不完,上网查找方案,发现原来是用 ...

  5. struts2值栈内部数据结构详解

    值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...

  6. ubuntu16.04 + ubuntu + apache2 配置apache解析php

    给apache安装php扩展:  sudo apt-get install libapache2-mod-php 注:这是apache解析php文件的关键,光修改配置文件不安装扩展是不起作用的. 目录 ...

  7. Selenium:元素等待的4种方法

    1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间.默认值是 ...

  8. 如何解决结果由block返回情况下的同步问题(转)

    开发中经常会遇到一种简单的同步问题: 系统在获取资源时,采用了block写法,外部逻辑需要的结果是在block回调中返回的 举个例子: 请求获取通讯录权限的系统弹窗 调用系统方法请求通讯录权限: AB ...

  9. PHP Cookie Session

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  10. 关于GRUB2

    grub2启动引导 GRUB 2是GNU GRUB(GRand Unified Bootloader)的最新版本.bootloader(引导程序)是计算机开机后(bios自检之后)第一个运行的软件程序 ...