Android AndBase框架實現(xiàn)多功能標題欄(一)
本文是針對AndBase框架學習整理的第一篇筆記,想要了解AndBase框架的朋友可以閱讀本文,大家共同學習。
1.使用AndBase實現(xiàn)多功能標題欄
AndBase框架內(nèi)部提供了許多的方式能夠使我們?nèi)ピO置一個更好的標題欄,進行動態(tài)的改變,而并非靜態(tài)的將標題欄界面寫死...能夠使得標題欄更加的美觀...總體就是動態(tài)的獲取布局然后通過對布局的操作來自定義一個良好的標題欄...
使用AndBase框架的時候我們的主函數(shù)就不是繼承于Acticity了,而是繼承于AbActivity,萬變不離其宗還是Activity...
public class MainActivity extends AbActivity
繼承了AbActivity這樣就使得自己的Activity擁有一個框架...我們就可以使用內(nèi)部包含的一些變量...就拿我們的標題欄變量來說吧...mAbTitleBar就是內(nèi)在的一個標題欄變量...凡是繼承了AbActivity的Activity就可以使用這個變量,這個變量會作為當前Activity中的標題欄變量..我們就直接可以對其進行一些相關屬性的設定..從而書寫我們自己的標題欄...
1.1 設置標題欄的有無...
標題欄的有無設置其實就是設置當前的mAbTitleBar是否進行顯示...通過調(diào)用SetVisiable函數(shù)來進行相關的設置...
public void setVisiable(boolean b){
if(b){
titleBar.setVisibility(View.VISIBLE); //設置標題欄顯示在視圖上..
}else{
titleBar.setVisibility(View.GONE);//設置標題欄不顯示在視圖上..
}
}
1.2 為標題欄添加新的控件...
無論是在標題欄還是Activity中如果想要動態(tài)的添加控件,那么必然是添加View的過程...添加View之前,我們需要把控件添加到View當中,然后再把View添加在Activity上,這樣就完成了動態(tài)添加視圖的效果...View其實只是一個空的架子,更形象的來說是一個沒有打起的氣球一樣..光有外殼,沒有東西,那么如果想要有東西,那么我們需要為其進行充氣,只有充了氣之后的View才是我們想要去進行加載的...否則是沒什么用的..
充氣的過程就是使用LayoutInflater.inflater(R.layout.XXX,root);函數(shù)來完成的...對ListView使用熟悉的那么想必也就非常清楚這個過程了...使用ListView時,我們只是對ListView中的Item進行布局的書寫,但是絕對不會在布局中寫死Item布局中的東西..因為Item中的東西一般都是進行動態(tài)添加的...所以我們一般是獲取ListView的ID,然后對每一個Item進行動態(tài)的加載...這一般是對ListView進行操作...其實都一樣...添加視圖都是進行動態(tài)添加...添加了View之后,我們?nèi)匀豢梢酝ㄟ^獲取控件然后綁定監(jiān)聽,從而做更多的操作...
這個函數(shù)是我自定義的一個函數(shù)...arg0和arg1是通過Inflater.inflate獲取到的視圖...
public void setRightview(int resid0,int resid1){
ClearRightView();
titleBar.addRightView(arg0); //為標題欄添加視圖...
titleBar.addRightView(arg1);
moreview=(Button) arg0.findViewById(resid0);//通過當前視圖獲取控件...
moreapp=(Button) arg1.findViewById(resid1);
//通過獲取控件之后,設置相關監(jiān)聽,從而完成更多的操作...
moreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "點擊", Toast.LENGTH_LONG).show();
}
});
moreapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "繼續(xù)點擊", Toast.LENGTH_LONG).show();
}
});
}
這樣就完成了視圖的添加...其實標題欄的操作基本都是這個過程...最重要的還是需要清楚其中的函數(shù)到底怎么用,如何為標題欄設置相關的屬性,比如說背景顏色,標題欄的文本,標題欄的Logo以及一些相關屬性的設置,其實說白了就是把xml那種布局方式通過Java代碼來更加靈活的進行運用...可以使得布局上的控件更加的靈活...
1.3 操作欄變換...
我們通過一個函數(shù)來看一看mAbTitleBar到底有哪些函數(shù)可以動態(tài)設置View視圖...這里是為了介紹一些相關的函數(shù)的應用...并沒有完整的代碼過程...源代碼過程我會最后進行給出..
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {//以下函數(shù)的調(diào)用時不存在函數(shù)順序的問題的...不同的調(diào)用順序顯示的結果是一樣的,,,
mAbTitleBar.setLogo(R.drawable.button_selector_delete); //為標題欄設置logo..
mAbTitleBar.setLogo2(R.drawable.button_selector_app); //為標題欄設置第二個Logo..這個setLogo只有這兩個函數(shù)..沒有Logo3...如果想設置更多的Logo..只能去寫xml布局...
mAbTitleBar.clearRightView(); //清除標題欄右邊的視圖..
View rightViewOk = mInflater.inflate(R.layout.ok_btn, null); //為一個View視圖充氣...
mAbTitleBar.addRightView(rightViewOk); //在標題欄右邊添加當前充氣后的視圖..
mAbTitleBar.setTitleText("正在修改"); //設置標題欄的文字屬性..
mAbTitleBar.setTitleBarBackground(R.drawable.top_bg2);//設置文字的背景..
mAbTitleBar.setTitleBarGravity(Gravity.LEFT,Gravity.CENTER);//設置標題欄的對其方式...
mAbTitleBar.setLogoOnClickListener(new OnClickListener() {
//為Logo圖片設置監(jiān)聽...
@Override
public void onClick(View v) {
//改變相關的屬性... mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
mAbTitleBar.setTitleText("多功能標題欄");
mAbTitleBar.clearRightView();
mAbTitleBar.setLogo(R.drawable.button_selector_back);
mAbTitleBar.setTitleBarGravity(Gravity.LEFT,Gravity.RIGHT);
mAbTitleBar.setTitleTextMargin(20, 0, 0, 0);
mAbTitleBar.getLogoView2().setVisibility(View.GONE); //設置可見性...
mAbTitleBar.setLogoOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
});
}
});
1.4 標題欄的下拉效果...

標題欄的下拉其實就是點擊標題形成下拉菜單..每個下拉菜單都是一個子選項...通過這些子選項我們可以做更多的事情...效果如上...其實每一個這樣類似的菜單都是一個ListView..通過對ListView的每一個Item進行初始化,那么也就自然而然的形成這樣的效果了...其實總體還是進行動態(tài)布局...
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAbTitleBar.setTitleTextBackgroundResource(R.drawable.drop_down_title_btn);
View popView = mInflater.inflate(R.layout.list_pop, null); //先獲取一個視圖..
ListView popListView = (ListView) popView.findViewById(R.id.pop_list); //獲取ListView的ID..
List<AbMenuItem> list = new ArrayList<AbMenuItem>(); //定義一個列表項...這個類只保存ID和Text屬性..
list.add(new AbMenuItem("蔡文姬"));
list.add(new AbMenuItem("貂蟬"));
list.add(new AbMenuItem("紫罌粟"));
list.add(new AbMenuItem("孫尚香"));
ListPopAdapter mListPopAdapter = new ListPopAdapter(TitleBarActivity.this, list,R.layout.list_pop_item); //定義一個適配器...
popListView.setAdapter(mListPopAdapter); //為ListView設置一個適配器...
mAbTitleBar.setTitleTextDropDown(popView); //設置TitleBar上的TextView被點擊的監(jiān)聽..
}
});
通過這樣的設置,很容易形成這樣的效果..這里使用了AbMenuItem類...通過源碼我們可以知道這個類有兩個構造函數(shù),一個是對int ID 和String Text兩個屬性進行保存,一個則是僅僅保存一個String Text屬性...這樣也就使得ListView顯示的東西比較的簡單...并且一般這種小型的ListView一般也就一個Text值..因此使用AbMenuItem還是比較方便的...這樣也就完成了一個下拉菜單...
1.5 適配器...
再簡單的說一下適配器這個東西吧...適配器主要還是用于為ListView中的每一個Item進行動態(tài)的設置,使得ListView的布局能夠更加的靈活...說白了就是定義了一種樣式,ListView中的每一個Item都需要按照這個樣式來進行顯示...非常的簡單...
/*
*
* CopyRight@ By Darker 2015-10-30
* 多功能菜單...
*
* */
package com.example.andbasetitlebar;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.ab.global.AbMenuItem;
public class Adapter extends BaseAdapter { //繼承BaseAdapter
private Context context;
private List<AbMenuItem> list;
private int itemResource;
public Adapter(Context context, List<AbMenuItem> list,int itemResource) {
this.context = context;
this.list = list;
this.itemResource = itemResource;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//由于我們的ListView中的Item顯示的方式都非常的簡單,因此ViewHolder類中也就僅僅定義了一個TextView屬性...
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder holder;
/*這個判斷其實是為了復用而定義的...因為ListView都是動態(tài)進行加載的.. *如果ListView中的Item超過了屏幕的大小,那么勢必就需要進行下拉... *下拉就代表原來的那些ListView就需要被銷毀...
* 那么總不能每一次滑動我們都新建立一個ViewHolder對象..我們可以把這些被銷毀的ViewHolder進行復用...
* 有了復用之后,再次滑動的時候ViewHolder會自動調(diào)用那些被銷毀掉的進行復用...從而使得資源得到重新加載...
* 說白了就是提高了復用性...
*/
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(itemResource, null); //定義一個視圖對象View...
holder = new ViewHolder();
holder.itemText = (TextView) convertView.findViewById(R.id.pop_item); //在當前的View中獲取ListView的ID..
convertView.setTag(holder);//設置標志..
} else {
holder = (ViewHolder) convertView.getTag();//這里可以直接獲取標志,對holder進行復用,減少了內(nèi)存的分配和開銷...
}
AbMenuItem item = list.get(position);
holder.itemText.setText(item.getText()); //為每一個Item中的TextView設置值...
return convertView;
}
static class ViewHolder {
TextView itemText;
}
}
實現(xiàn)多功能菜單其實非常的簡單,大部分的函數(shù)都是寫好的函數(shù),我們只需要調(diào)用就可以設置標題欄的相關樣式...實現(xiàn)多功能的菜單...最后附加上我自己書寫的代碼..還是完整的代碼能夠使我們進步的更加迅速...從而可以理解其中的調(diào)用過程和原理。、
源碼下載:Android AndBase框架實現(xiàn)多功能標題欄
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。
相關文章
Flutter沉浸式狀態(tài)欄/AppBar導航欄/仿咸魚底部凸起導航欄效果
這篇文章主要介紹了Flutter沉浸式狀態(tài)欄/AppBar導航欄/仿咸魚底部凸起導航欄效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Android開發(fā)實現(xiàn)Launcher3應用列表修改透明背景的方法
這篇文章主要介紹了Android開發(fā)實現(xiàn)Launcher3應用列表修改透明背景的方法,結合實例形式分析了Launcher3相關配置文件與功能函數(shù)修改設置操作技巧,需要的朋友可以參考下2017-11-11

