Android AndBase框架实现多功能标题栏(一)

本文是针对AndBase框架学习整理的第一篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习。

1.使用AndBase实现多功能标题栏

AndBase框架内部提供了许多的方式能够使我们去设置一个更好的标题栏,进行动态的改变,而并非静态的将标题栏界面写死...能够使得标题栏更加的美观...总体就是动态的获取布局然后通过对布局的操作来自定义一个良好的标题栏...

使用AndBase框架的时候我们的主函数就不是继承于Acticity了,而是继承于AbActivity,万变不离其宗还是Activity...

public class MainActivity extends AbActivity

继承了AbActivity这样就使得自己的Activity拥有一个框架...我们就可以使用内部包含的一些变量...就拿我们的标题栏变量来说吧...mAbTitleBar就是内在的一个标题栏变量...凡是继承了AbActivity的Activity就可以使用这个变量,这个变量会作为当前Activity中的标题栏变量..我们就直接可以对其进行一些相关属性的设定..从而书写我们自己的标题栏...

1.1 设置标题栏的有无...

标题栏的有无设置其实就是设置当前的mAbTitleBar是否进行显示...通过调用SetVisiable函数来进行相关的设置...

public void setVisiable(boolean b){
 if(b){
  titleBar.setVisibility(View.VISIBLE); //设置标题栏显示在视图上..
 }else{
  titleBar.setVisibility(View.GONE);//设置标题栏不显示在视图上..
 }
}

1.2 为标题栏添加新的控件...

无论是在标题栏还是Activity中如果想要动态的添加控件,那么必然是添加View的过程...添加View之前,我们需要把控件添加到View当中,然后再把View添加在Activity上,这样就完成了动态添加视图的效果...View其实只是一个空的架子,更形象的来说是一个没有打起的气球一样..光有外壳,没有东西,那么如果想要有东西,那么我们需要为其进行充气,只有充了气之后的View才是我们想要去进行加载的...否则是没什么用的..

充气的过程就是使用LayoutInflater.inflater(R.layout.XXX,root);函数来完成的...对ListView使用熟悉的那么想必也就非常清楚这个过程了...使用ListView时,我们只是对ListView中的Item进行布局的书写,但是绝对不会在布局中写死Item布局中的东西..因为Item中的东西一般都是进行动态添加的...所以我们一般是获取ListView的ID,然后对每一个Item进行动态的加载...这一般是对ListView进行操作...其实都一样...添加视图都是进行动态添加...添加了View之后,我们仍然可以通过获取控件然后绑定监听,从而做更多的操作...

这个函数是我自定义的一个函数...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);

 //通过获取控件之后,设置相关监听,从而完成更多的操作...
 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, "继续点击", Toast.LENGTH_LONG).show();
  }
 });

 }

这样就完成了视图的添加...其实标题栏的操作基本都是这个过程...最重要的还是需要清楚其中的函数到底怎么用,如何为标题栏设置相关的属性,比如说背景颜色,标题栏的文本,标题栏的Logo以及一些相关属性的设置,其实说白了就是把xml那种布局方式通过Java代码来更加灵活的进行运用...可以使得布局上的控件更加的灵活...

1.3 操作栏变换...

我们通过一个函数来看一看mAbTitleBar到底有哪些函数可以动态设置View视图...这里是为了介绍一些相关的函数的应用...并没有完整的代码过程...源代码过程我会最后进行给出..

btn5.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {//以下函数的调用时不存在函数顺序的问题的...不同的调用顺序显示的结果是一样的,,,
  mAbTitleBar.setLogo(R.drawable.button_selector_delete); //为标题栏设置logo..
  mAbTitleBar.setLogo2(R.drawable.button_selector_app); //为标题栏设置第二个Logo..这个setLogo只有这两个函数..没有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图片设置监听...
   @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进行初始化,那么也就自然而然的形成这样的效果了...其实总体还是进行动态布局...

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被点击的监听..
  }
 });

通过这样的设置,很容易形成这样的效果..这里使用了AbMenuItem类...通过源码我们可以知道这个类有两个构造函数,一个是对int ID 和String Text两个属性进行保存,一个则是仅仅保存一个String Text属性...这样也就使得ListView显示的东西比较的简单...并且一般这种小型的ListView一般也就一个Text值..因此使用AbMenuItem还是比较方便的...这样也就完成了一个下拉菜单...

1.5 适配器...

再简单的说一下适配器这个东西吧...适配器主要还是用于为ListView中的每一个Item进行动态的设置,使得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都是动态进行加载的..  *如果ListView中的Item超过了屏幕的大小,那么势必就需要进行下拉...  *下拉就代表原来的那些ListView就需要被销毁...
   * 那么总不能每一次滑动我们都新建立一个ViewHolder对象..我们可以把这些被销毁的ViewHolder进行复用...
   * 有了复用之后,再次滑动的时候ViewHolder会自动调用那些被销毁掉的进行复用...从而使得资源得到重新加载...
   * 说白了就是提高了复用性...
   */
 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进行复用,减少了内存的分配和开销...
 }
 AbMenuItem item = list.get(position);
 holder.itemText.setText(item.getText()); //为每一个Item中的TextView设置值...

 return convertView;
 }

 static class ViewHolder {
 TextView itemText;
 }

}

实现多功能菜单其实非常的简单,大部分的函数都是写好的函数,我们只需要调用就可以设置标题栏的相关样式...实现多功能的菜单...最后附加上我自己书写的代码..还是完整的代码能够使我们进步的更加迅速...从而可以理解其中的调用过程和原理。、

源码下载:Android AndBase框架实现多功能标题栏

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Android标题栏中添加返回按钮功能

    标题栏中的返回按钮在实际使用中用的比较多,今天就来讲讲我在项目开发中的使用经历,话不多说,还是直接上源码,上源码是最给力的. 一. 编写自定义类 public class CustomTitle { private static Activity mActivity; public static void getCustomTitle(Activity activity, String title) { mActivity = activity; mActivity.requestWindowF

  • Android中去掉标题栏的几种方法(三种)

    1.在java代码中 (SplashActivity继承AppCompatActivity时无效) 2.在manifest.xml中改Theme 3.先在style.xml中自定义style <?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="notitle"> <item name="android:windowNo

  • Android 全屏无标题栏的三种实现方法

    一.通过Java代码 在setContentView之前执行: requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏 二.调用Android自带的Theme 直接在AndroidManifest.xml中需要全屏显

  • 3种Android隐藏顶部状态栏及标题栏的方法

    本文包含3种隐藏顶部状态栏及标题栏和一种隐藏Android 4.0平板底部状态栏的方法,分享给大家供大家参考,具体内容如下 方法一 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEA

  • Android中自定义标题栏样式的两种方法

    原装的Android标题栏配色比较单调,就是黑色的一坨,现在假设你的软件需要独自添加标题栏,这样不仅美观而且可以将进度条等加进去,如何实现: 方法一.在你的那张Activity中onCreate方法中加上下面代码: requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); //软件activity的布局 getWindow().setFeatureInt(Window.FEATURE_CUS

  • Android自定义状态栏颜色与应用标题栏颜色一致

    每次看IOS上的应用,应用中状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,对于这种效果,像我这种好奇心强的人就会去看看那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并且你的安卓SDK版本是4.4及以上,你可以看下它的效果: 实现此功能有两种方法: 1.在xml中设置主题或自定义style: Theme.Holo.Light.NoActionBar.TranslucentDec

  • Android ScrollView滑动实现仿QQ空间标题栏渐变

    今天来研究的是ScrollView-滚动视图,滚动视图又分横向滚动视图(HorizontalScrollView)和纵向滚动视图(ScrollView),今天主要研究纵向的.相信大家在开发中经常用到,ScrollView的功能已经很强大了,但是仍然满足不了我们脑洞大开的UI设计师们,所以我们要自定义-本篇文章主要讲监听ScrollView的滑动实现仿QQ空间标题栏渐变,先看一下效果图: 好了我们切入主题. 有可能你不知道的那些ScrollView属性  •android:scrollbars 设

  • Android AndBase框架实现多功能标题栏(一)

    本文是针对AndBase框架学习整理的第一篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 1.使用AndBase实现多功能标题栏 AndBase框架内部提供了许多的方式能够使我们去设置一个更好的标题栏,进行动态的改变,而并非静态的将标题栏界面写死...能够使得标题栏更加的美观...总体就是动态的获取布局然后通过对布局的操作来自定义一个良好的标题栏... 使用AndBase框架的时候我们的主函数就不是继承于Acticity了,而是继承于AbActivity,万变不离其宗还是A

  • Android AndBase框架内部封装实现进度框、Toast框、弹出框、确认框(二)

    本文是针对AndBase框架学习整理的第二篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框 AndBase中AbActivity封装好了许多方法提供我们去使用,使得在使用的时候更加的方便,只需要传递相关参数即可..省去了我们自己使用基础的函数进行构造... 就好比进度框,Toast框,弹出框,确认框...这些基本的东西都在AndBase的AbActivity封装好了...我们只需要传递参数调用其中

  • Android AndBase框架使用封装好的函数完成Http请求(三)

    本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现有参Http Get请求... AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼

  • Android利用碎片fragment实现底部标题栏(Github模板开源)

     fragment特点 Fragment与Activity相似,有自己的生命周期,布局.相当于一个迷你的Activity Fragment可以作为Activity的组成部分,一个Activity可以有多个Fragment 一个Fragment可以被多个Activity重用 在Activity运行时可动态地加入.移除.交换Fragment 一个具有自己生命周期的控件,有自己的处理输入事件的能力 依赖于Activity,能互相通信和托管. 在安卓开发当中,一个十分重要的布局则是底部标题栏了,拥有了底

  • Android实现底部导航栏功能(选项卡)

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其中各个类的作用以及资源文件就不详细解释了,还有资源图片(在该Demo中借用了其它应用程序的资源图片)也不提供了,大家可以自行更换自己需要的资源图片.直接上各个布局文件或各个类的代码: 1. res/layout目录下的 maintabs.xml 源码: <?xml version="1.0&q

  • Android Volley框架使用源码分享

    过去在Android上网络通信都是使用的Xutils 因为用它可以顺道处理了图片和网络这两个方面,后来发觉Xutils里面使用的是HttpClient  而Google在6.0的版本上已经把HttpClient废除了,所以开始寻找新的网络框架,okhttp也用过,但是它是在作用在UI线程,使用起来还需要用handler 所以就先用着Volley框架了.  这里我先分析下Volley框架的简单网络请求的源码. 使用Volley请求网络数据的简单过程: RequestQueue queue = Vo

  • Android自定义processor实现bindView功能的实例

    一.简介 在现阶段的Android开发中,注解越来越流行起来,比如ButterKnife,Retrofit,Dragger,EventBus等等都选择使用注解来配置.按照处理时期,注解又分为两种类型,一种是运行时注解,另一种是编译时注解,运行时注解由于性能问题被一些人所诟病.编译时注解的核心依赖APT(Annotation Processing Tools)实现,原理是在某些代码元素上(如类型.函数.字段等)添加注解,在编译时编译器会检查AbstractProcessor的子类,并且调用该类型的

  • 使用Android WebSocket实现即时通讯功能

    最近做这个功能,分享一下.即时通讯(Instant Messaging)最重要的毫无疑问就是即时,不能有明显的延迟,要实现IM的功能其实并不难,目前有很多第三方,比如极光的JMessage,都比较容易实现.但是如果项目有特殊要求(如不能使用外网),那就得自己做了,所以我们需要使用WebSocket. WebSocket WebSocket协议就不细讲了,感兴趣的可以具体查阅资料,简而言之,它就是一个可以建立长连接的全双工(full-duplex)通信协议,允许服务器端主动发送信息给客户端. Ja

  • Android实现长截屏功能

    本文实例为大家分享了Android实现长截屏功能的具体代码,供大家参考,具体内容如下 1.MainActivity public class MainActivity extends AppCompatActivity { ScrollView scrollView; String sdRoot = Environment.getExternalStorageDirectory().getPath(); @Override protected void onCreate(Bundle saved

  • Android原生态实现分享转发功能实例

    目录 导读:  一.xml布局文件 二.创建一个实体类 AppInfo.java,用来保存应用信息 三.重写PopupWindow控件SharePopupWindow.java,自定义分享的弹窗 四.使用provider 五.写一个工具类  六.GridView的适配器 AppInfoAdapter.java 七.自定义分享窗口SharePopupWindow的调用  导读: 之前刚学安卓时,写过一篇"Android调用系统shareAPI实现分享转发功能"的文章,随着安卓版本的迭代更

随机推荐