最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android AndBase框架實(shí)現(xiàn)多功能標(biāo)題欄(一)

 更新時間:2016年03月30日 16:09:38   投稿:lijiao  
這篇文章主要整理了Android AndBase框架學(xué)習(xí)筆記,本文主要使用AndBase實(shí)現(xiàn)多功能標(biāo)題欄,感興趣的小伙伴們可以參考一下

本文是針對AndBase框架學(xué)習(xí)整理的第一篇筆記,想要了解AndBase框架的朋友可以閱讀本文,大家共同學(xué)習(xí)。

1.使用AndBase實(shí)現(xiàn)多功能標(biāo)題欄

AndBase框架內(nèi)部提供了許多的方式能夠使我們?nèi)ピO(shè)置一個更好的標(biāo)題欄,進(jìn)行動態(tài)的改變,而并非靜態(tài)的將標(biāo)題欄界面寫死...能夠使得標(biāo)題欄更加的美觀...總體就是動態(tài)的獲取布局然后通過對布局的操作來自定義一個良好的標(biāo)題欄...

使用AndBase框架的時候我們的主函數(shù)就不是繼承于Acticity了,而是繼承于AbActivity,萬變不離其宗還是Activity...

public class MainActivity extends AbActivity

繼承了AbActivity這樣就使得自己的Activity擁有一個框架...我們就可以使用內(nèi)部包含的一些變量...就拿我們的標(biāo)題欄變量來說吧...mAbTitleBar就是內(nèi)在的一個標(biāo)題欄變量...凡是繼承了AbActivity的Activity就可以使用這個變量,這個變量會作為當(dāng)前Activity中的標(biāo)題欄變量..我們就直接可以對其進(jìn)行一些相關(guān)屬性的設(shè)定..從而書寫我們自己的標(biāo)題欄...

1.1 設(shè)置標(biāo)題欄的有無...

標(biāo)題欄的有無設(shè)置其實(shí)就是設(shè)置當(dāng)前的mAbTitleBar是否進(jìn)行顯示...通過調(diào)用SetVisiable函數(shù)來進(jìn)行相關(guān)的設(shè)置...

public void setVisiable(boolean b){
 if(b){
  titleBar.setVisibility(View.VISIBLE); //設(shè)置標(biāo)題欄顯示在視圖上..
 }else{
  titleBar.setVisibility(View.GONE);//設(shè)置標(biāo)題欄不顯示在視圖上..
 }
}

1.2 為標(biāo)題欄添加新的控件...

  無論是在標(biāo)題欄還是Activity中如果想要動態(tài)的添加控件,那么必然是添加View的過程...添加View之前,我們需要把控件添加到View當(dāng)中,然后再把View添加在Activity上,這樣就完成了動態(tài)添加視圖的效果...View其實(shí)只是一個空的架子,更形象的來說是一個沒有打起的氣球一樣..光有外殼,沒有東西,那么如果想要有東西,那么我們需要為其進(jìn)行充氣,只有充了氣之后的View才是我們想要去進(jìn)行加載的...否則是沒什么用的..

  充氣的過程就是使用LayoutInflater.inflater(R.layout.XXX,root);函數(shù)來完成的...對ListView使用熟悉的那么想必也就非常清楚這個過程了...使用ListView時,我們只是對ListView中的Item進(jìn)行布局的書寫,但是絕對不會在布局中寫死Item布局中的東西..因?yàn)镮tem中的東西一般都是進(jìn)行動態(tài)添加的...所以我們一般是獲取ListView的ID,然后對每一個Item進(jìn)行動態(tài)的加載...這一般是對ListView進(jìn)行操作...其實(shí)都一樣...添加視圖都是進(jìn)行動態(tài)添加...添加了View之后,我們?nèi)匀豢梢酝ㄟ^獲取控件然后綁定監(jiān)聽,從而做更多的操作...

  這個函數(shù)是我自定義的一個函數(shù)...arg0和arg1是通過Inflater.inflate獲取到的視圖...

public void setRightview(int resid0,int resid1){
 ClearRightView(); 
 titleBar.addRightView(arg0); //為標(biāo)題欄添加視圖...
 titleBar.addRightView(arg1); 
 moreview=(Button) arg0.findViewById(resid0);//通過當(dāng)前視圖獲取控件...
 moreapp=(Button) arg1.findViewById(resid1);
 
 //通過獲取控件之后,設(shè)置相關(guān)監(jiān)聽,從而完成更多的操作...
 moreview.setOnClickListener(new View.OnClickListener() {
  
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  Toast.makeText(context, "點(diǎn)擊", Toast.LENGTH_LONG).show();
  }
 });
 
 moreapp.setOnClickListener(new View.OnClickListener() {
  
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  Toast.makeText(context, "繼續(xù)點(diǎn)擊", Toast.LENGTH_LONG).show();
  }
 });

 }

  這樣就完成了視圖的添加...其實(shí)標(biāo)題欄的操作基本都是這個過程...最重要的還是需要清楚其中的函數(shù)到底怎么用,如何為標(biāo)題欄設(shè)置相關(guān)的屬性,比如說背景顏色,標(biāo)題欄的文本,標(biāo)題欄的Logo以及一些相關(guān)屬性的設(shè)置,其實(shí)說白了就是把xml那種布局方式通過Java代碼來更加靈活的進(jìn)行運(yùn)用...可以使得布局上的控件更加的靈活...

1.3 操作欄變換...

  我們通過一個函數(shù)來看一看mAbTitleBar到底有哪些函數(shù)可以動態(tài)設(shè)置View視圖...這里是為了介紹一些相關(guān)的函數(shù)的應(yīng)用...并沒有完整的代碼過程...源代碼過程我會最后進(jìn)行給出..

btn5.setOnClickListener(new View.OnClickListener() {
   
  @Override
  public void onClick(View v) {//以下函數(shù)的調(diào)用時不存在函數(shù)順序的問題的...不同的調(diào)用順序顯示的結(jié)果是一樣的,,,
  mAbTitleBar.setLogo(R.drawable.button_selector_delete); //為標(biāo)題欄設(shè)置logo..
  mAbTitleBar.setLogo2(R.drawable.button_selector_app); //為標(biāo)題欄設(shè)置第二個Logo..這個setLogo只有這兩個函數(shù)..沒有Logo3...如果想設(shè)置更多的Logo..只能去寫xml布局...
  mAbTitleBar.clearRightView(); //清除標(biāo)題欄右邊的視圖..
  View rightViewOk = mInflater.inflate(R.layout.ok_btn, null); //為一個View視圖充氣...
  mAbTitleBar.addRightView(rightViewOk); //在標(biāo)題欄右邊添加當(dāng)前充氣后的視圖..
  mAbTitleBar.setTitleText("正在修改"); //設(shè)置標(biāo)題欄的文字屬性..
  mAbTitleBar.setTitleBarBackground(R.drawable.top_bg2);//設(shè)置文字的背景..
  mAbTitleBar.setTitleBarGravity(Gravity.LEFT,Gravity.CENTER);//設(shè)置標(biāo)題欄的對其方式...
  mAbTitleBar.setLogoOnClickListener(new OnClickListener() {
   //為Logo圖片設(shè)置監(jiān)聽...
   @Override
   public void onClick(View v) {
   //改變相關(guān)的屬性... mAbTitleBar.setTitleBarBackground(R.drawable.top_bg);
   mAbTitleBar.setTitleText("多功能標(biāo)題欄");
   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); //設(shè)置可見性...
   mAbTitleBar.setLogoOnClickListener(new OnClickListener() {
    
    @Override
    public void onClick(View v) {
    finish();
    }
   });
   }
  });
  }
 }); 

1.4 標(biāo)題欄的下拉效果...

  標(biāo)題欄的下拉其實(shí)就是點(diǎn)擊標(biāo)題形成下拉菜單..每個下拉菜單都是一個子選項(xiàng)...通過這些子選項(xiàng)我們可以做更多的事情...效果如上...其實(shí)每一個這樣類似的菜單都是一個ListView..通過對ListView的每一個Item進(jìn)行初始化,那么也就自然而然的形成這樣的效果了...其實(shí)總體還是進(jìn)行動態(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>(); //定義一個列表項(xiàng)...這個類只保存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設(shè)置一個適配器...
   
   mAbTitleBar.setTitleTextDropDown(popView); //設(shè)置TitleBar上的TextView被點(diǎn)擊的監(jiān)聽..
  }
 });

  通過這樣的設(shè)置,很容易形成這樣的效果..這里使用了AbMenuItem類...通過源碼我們可以知道這個類有兩個構(gòu)造函數(shù),一個是對int ID 和String Text兩個屬性進(jìn)行保存,一個則是僅僅保存一個String Text屬性...這樣也就使得ListView顯示的東西比較的簡單...并且一般這種小型的ListView一般也就一個Text值..因此使用AbMenuItem還是比較方便的...這樣也就完成了一個下拉菜單...

1.5 適配器...

  再簡單的說一下適配器這個東西吧...適配器主要還是用于為ListView中的每一個Item進(jìn)行動態(tài)的設(shè)置,使得ListView的布局能夠更加的靈活...說白了就是定義了一種樣式,ListView中的每一個Item都需要按照這個樣式來進(jìn)行顯示...非常的簡單...

/*
 * 
 * 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;
  /*這個判斷其實(shí)是為了復(fù)用而定義的...因?yàn)長istView都是動態(tài)進(jìn)行加載的..  *如果ListView中的Item超過了屏幕的大小,那么勢必就需要進(jìn)行下拉...  *下拉就代表原來的那些ListView就需要被銷毀...
   * 那么總不能每一次滑動我們都新建立一個ViewHolder對象..我們可以把這些被銷毀的ViewHolder進(jìn)行復(fù)用...
   * 有了復(fù)用之后,再次滑動的時候ViewHolder會自動調(diào)用那些被銷毀掉的進(jìn)行復(fù)用...從而使得資源得到重新加載...
   * 說白了就是提高了復(fù)用性...
   */ 
 if (convertView == null) {
  convertView = LayoutInflater.from(context).inflate(itemResource, null); //定義一個視圖對象View...
  holder = new ViewHolder();
  holder.itemText = (TextView) convertView.findViewById(R.id.pop_item); //在當(dāng)前的View中獲取ListView的ID..
  convertView.setTag(holder);//設(shè)置標(biāo)志..
 } else {
  holder = (ViewHolder) convertView.getTag();//這里可以直接獲取標(biāo)志,對holder進(jìn)行復(fù)用,減少了內(nèi)存的分配和開銷...
 }
 AbMenuItem item = list.get(position);
 holder.itemText.setText(item.getText()); //為每一個Item中的TextView設(shè)置值...
 
 return convertView;
 }

 static class ViewHolder {
 TextView itemText;
 }

}

實(shí)現(xiàn)多功能菜單其實(shí)非常的簡單,大部分的函數(shù)都是寫好的函數(shù),我們只需要調(diào)用就可以設(shè)置標(biāo)題欄的相關(guān)樣式...實(shí)現(xiàn)多功能的菜單...最后附加上我自己書寫的代碼..還是完整的代碼能夠使我們進(jìn)步的更加迅速...從而可以理解其中的調(diào)用過程和原理。、

源碼下載:Android AndBase框架實(shí)現(xiàn)多功能標(biāo)題欄

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評論

扶沟县| 莱阳市| 静海县| 湖北省| 郯城县| 都安| 织金县| 云阳县| 蒙阴县| 翼城县| 离岛区| 茂名市| 汾西县| 余庆县| 招远市| 怀安县| 电白县| 延寿县| 泽库县| 新安县| 清徐县| 汨罗市| 财经| 南涧| 德兴市| 乳源| 淳安县| 丹巴县| 临城县| 新化县| 大化| 德安县| 仁怀市| 五原县| 商河县| 东方市| 延庆县| 敦化市| 上林县| 鄂尔多斯市| 嘉定区|