隨着大衆口味的不斷提升,對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 }
好了,就這樣吧。