android-oldman之TitleBar

  随着大众口味的不断提高,对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

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="48dp"
 5     android:gravity="center_horizontal"
 6     android:background="#ffffff">
 7
 8     <View
 9         android:id="@+id/view_line"
10         android:layout_width="match_parent"
11         android:layout_height="1dp"
12         android:layout_alignParentBottom="true"
13         android:background="#0000ff" />
14
15     <RelativeLayout
16         android:id="@+id/rel_titlebar"
17         android:layout_width="match_parent"
18         android:layout_height="match_parent" >
19
20         <TextView
21             android:id="@+id/tv_back"
22             android:layout_width="45dp"
23             android:layout_height="match_parent"
24             android:layout_alignParentLeft="true"
25             android:background="#66ff0000"
26             android:gravity="center"
27             android:focusable="true"
28             android:clickable="true"
29             android:text="后退"
30             android:visibility="invisible" />
31
32         <View
33             android:id="@+id/view_left"
34             android:layout_width="1dp"
35             android:layout_height="match_parent"
36             android:layout_toRightOf="@id/tv_back"
37             android:background="#6600ff00"
38             android:visibility="invisible" />
39
40         <TextView
41             android:id="@+id/tv_other"
42             android:layout_width="45dp"
43             android:layout_height="match_parent"
44             android:layout_alignParentRight="true"
45             android:background="#66ff0000"
46             android:gravity="center"
47             android:text="刷新"
48             android:focusable="true"
49             android:clickable="true"
50             android:visibility="invisible" />
51
52         <View
53             android:id="@+id/view_right"
54             android:layout_width="1dp"
55             android:layout_height="match_parent"
56             android:layout_toLeftOf="@id/tv_other"
57             android:background="#6600ff00"
58             android:visibility="invisible" />
59
60         <TextView
61             android:id="@+id/tv_title_name"
62             android:layout_width="45dp"
63             android:layout_height="match_parent"
64             android:layout_toLeftOf="@id/view_right"
65             android:layout_toRightOf="@id/view_left"
66             android:background="#6600ff00"
67             android:gravity="center"
68             android:text="Title_Name" />
69     </RelativeLayout>
70
71 </RelativeLayout>

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

 1 package com.example.ttilebardemo;
 2
 3 import android.app.Activity;
 4 import android.content.Context;
 5 import android.graphics.Color;
 6 import android.util.AttributeSet;
 7 import android.view.LayoutInflater;
 8 import android.view.View;
 9 import android.view.View.OnClickListener;
10 import android.widget.RelativeLayout;
11 import android.widget.TextView;
12 import android.widget.Toast;
13
14 public class TitleBarActivity extends RelativeLayout implements OnClickListener {
15
16     private Context mContext;
17     private View left, bottom, right;
18     private TextView backTextView, titleName, refersh;
19     private OnClickListener onClickListener;
20     private boolean canBack = false;
21
22     public TitleBarActivity(Context context) {
23         this(context, null);
24
25     }
26
27     public TitleBarActivity(Context context, AttributeSet attr) {
28         super(context, attr);
29         mContext = context;
30         init();
31     }
32
33     private void init() {
34         LayoutInflater.from(mContext).inflate(R.layout.activity_titlebar, this, true);
35         // 初始化view
36         left = findViewById(R.id.view_left);
37         bottom = findViewById(R.id.view_line);
38         right = findViewById(R.id.view_right);
39         // 初始化textview
40         backTextView = (TextView) findViewById(R.id.tv_back);
41         backTextView.setOnClickListener(this);
42         titleName = (TextView) findViewById(R.id.tv_title_name);
43         refersh = (TextView) findViewById(R.id.tv_other);
44
45     }
46
47     /**
48      * 设置titleBar的名字
49      */
50     public void setTitleName(String name) {
51         titleName.setText(name);
52     }
53
54     /**
55      * 设置titleBar左侧可见性
56      */
57     public void setBackVisible() {
58         backTextView.setVisibility(View.VISIBLE);
59         left.setVisibility(View.VISIBLE);
60
61     }
62
63
64     /**
65      * 设置右侧字体可见
66      */
67     public void setRefeshVisible() {
68         refersh.setVisibility(View.VISIBLE);
69         right.setVisibility(View.VISIBLE);
70     }
71     /**
72      * 设置左侧刷新的监听
73      */
74     public void setRefreshListener(OnClickListener onRefresh , boolean canBack){
75         refersh.setOnClickListener(onRefresh);
76         this.canBack = canBack;
77     }
78
79
80     /**
81      * 设左边的按钮的点击事件。
82      */
83
84     @Override
85     public void onClick(View v) {
86         if(v.getId() == R.id.tv_back && backTextView.isShown() && canBack){
87             backTextView.setBackgroundColor(Color.GREEN);
88         }
89
90     }
91
92 }

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

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

activity_main.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:gravity="center_horizontal"
 6     android:background="#e7e7e7" >
 7
 8     <com.example.ttilebardemo.TitleBarActivity
 9         android:id="@+id/title_bar"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content"
12         >
13     </com.example.ttilebardemo.TitleBarActivity>
14
15     <TextView
16         android:id="@+id/tv_haha"
17         android:layout_width="match_parent"
18         android:layout_height="wrap_content"
19         android:layout_marginTop="50dp"
20         android:gravity="center"
21         android:layout_below="@id/title_bar"
22         android:text="你好,titleBar" />
23
24 </RelativeLayout>

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

 1 package com.example.ttilebardemo;
 2
 3 import android.annotation.SuppressLint;
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.util.Log;
 7 import android.view.Menu;
 8 import android.view.MenuItem;
 9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.TextView;
12 import android.widget.Toast;
13
14 public class MainActivity extends Activity {
15     private TextView tvHa;
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         initView();
21     }
22
23     private void initView() {
24         tvHa = (TextView) findViewById(R.id.tv_haha);
25         TitleBarActivity titleBar = (TitleBarActivity) findViewById(R.id.title_bar);
26         titleBar.setBackVisible();
27         titleBar.setTitleName("在窗口设置");
28         titleBar.setRefeshVisible();
29
30         titleBar.setRefreshListener(new OnClickListener() {
31
32             public void onClick(View v) {
33                 Log.d("引用页面::::::", "kwg kwg ........");
34             }
35         },true);
36     }
37 }

好了,就这样吧。

时间: 2024-11-05 18:55:45

android-oldman之TitleBar的相关文章

关于android 自定义TitleBar 会遇到的问题

首先 ,android的默认titlebar 是这样的 自己写完可以是这样的(随便一改) titlebar自己的布局文件想怎么写就怎么写. 我的布局文件这样: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=&qu

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

<?xml version="1.0" encoding="utf-8"?>  <bitmap xmlns:android="http://schemas.android.com/apk/res/android"    android:src="@drawable/bg_header"      android:tileMode="repeat" >  </bitmap>

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

相关文章 Android绘制优化(一)绘制性能分析 前言 我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升.当然这只是布局优化的一方面,那么如何来进行布局的分析和优化呢?本篇文章会给你一个满意的答案. 1.布局优化工具 在讲到如何去布局优化前,我们先来学习两种布局优化的工具. Hierarchy Viewer Hierarchy Viewer是Android SDK自带的可视化的调试工具,用来检查布局嵌套和绘制的时间.需要注意的是在在A

Android商城开发系列(七)—— 使用RecyclerView展示首页数据

前面我们讲到了使用OkHttp请求网络和FastJson解析数据了,接下来我们就开始把获取到的数据通过数据适配器展示在页面上了.Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到view上,提供给用户看! 商城首页的数据是使用RecyclerView进行展示的,下面我们来讲讲如何将获取到的数据通过RecyclerView展示. 首先看一下HomeFragment的布局代码,代码如下: 1 <?xml version="1.0" encoding

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

通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现有控件来自定义控件,这节我们来讨论第二个议题.怎么将控件组合来实现一个功能强大的自定义控件. 先看看创建组合控件的好处吧,创建组合控件能够很好的创建具有组合功能的控件集合.那我们一般又是怎么做的了,一般我们来继承一个合适的ViewGroup,再为他创建一个新功能,从而就形成了一个新功能的控件.我们还

android dialog 筛选列表

1.效果图 2. 布局文件 1)显示筛选的标题 <?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_

android datepicker timepicker简单用法

1.效果图 2. xml布局文件 <?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第一行代码》学习记录008 - 创建自定义控件

一.关于View与布局,首先上图 从图中可以看到: View是Android中最基本的UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这个区域的各种事件: ViewGroup是一种特殊的View,它可以包含很多子View和子ViewGroup,是一种用于放置控件和布局的容器: 我们所使用的所有控件都是直接或间接继承View的,各种控件其实就是在View的基础上添加了各自的功能: 所有布局都是直接继承自ViewGroup的: 二.定义自定义控件需要: 自定义控件的布局文件: 自定义控件的类: 以

[应用妹 --第二篇 主界面Tab搭建] android应用市场之快速开发

主界面布局如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:la

Android报警功能,报警铃音,手机开始震动

公司项目需求,需要给软件加入报警功能, 点击手绘的报警图标,开始震动,并且发出报警铃音, 使用了layerlist,drawable,Vibrator,soundpool public class SosMainActivity extends BaseActivity{ private TextView sosTv1,sosTv2,sosTv3; private int blueColor , whiteColor,transparent; private Vibrator vibrator;