android-oldman之TitleBar

  隨着大衆口味的不斷提升,對app要的開發的要求也不斷提升,開發人員們要在app上展現的東西安也愈來愈多,android早期的一些控件慢慢的不不能知足開發的要求了,好比TitleBar的應用的就沒有原來的那麼多了,後來,谷歌推出了ActionBar,再後來又推出了ToolBar.來知足日益增長的開發需求。android

  本文仍是爲了複習原來的一些技術,至於新的技術,其實道理都是一個樣的,掌握一些關鍵的地方,很容易就弄明白。app

  下面,咱們說一下,如何自定義一個TitleBar,來實現一些功能:1.能夠在任一要用到此統同樣式的TitleBar的Activity中,設置TitleBar了不一樣標題。2.在不一樣標題中,依據需求,顯示後退按鈕。3.在不一樣activity中,依據需求,設置titleBar左側展現圖片,文字,並實現點擊執行動做的功能。ide

  最終要實現的樣示:佈局

  特色:把TitleBarActiviti.class放在一個util文件夾中,哪裏用到,直接在個xml佈局文件裏如本類中同樣引用(像用TextView同樣去用就好了。)。能夠設置左側後退不顯示,右側刷新不顯示。至於titleBar的樣式,你們徹底能夠本身設置。字體

  

 

 

這裏,在退只是給後退控件變下着色,不作太深的說明。刷新也只是在log裏打下日誌,有興趣的小夥伴能夠本身去擴展下功能。this

 

廢話很少說,直接開幹:我理解的安卓開發,就是種蘿蔔,挖個坑,放個蘿蔔。坑就是要一些控件了,蘿蔔就是無論哪裏來的通過怎麼處理後的數據。spa

1、挖坑:3d

  在layout佈局文件裏編寫TitleBar的佈局文件。日誌

activity_titlebar.xmlcode

 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>

 

2、種蘿蔔(編寫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已經定義完成,下面就開始 使用了。

3、在使用類的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>

4、在代碼中對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 }

好了,就這樣吧。

相關文章
相關標籤/搜索