Android Action Bar 自定义View

简介:

接着上一篇Action Bar 加入Back键, 在Action Bar中加入自定义View. 依然先看效果:


actionbar自定义view的布局文件action_bar.xml, 此处可以任意发挥, 实现脑海中的自定义View.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:layout_width = "wrap_content"
     android:layout_height = "match_parent"
     android:gravity = "center_vertical"
     android:orientation = "horizontal" >
     < TextView
         android:id = "@+id/action_bar_title"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:textColor = "#EEA9B8"
         android:text = "@string/action_bar_title"  />
     < Spinner
         android:id = "@+id/action_bar_spinner"
         android:layout_width = "wrap_content"
         android:layout_height = "match_parent"  >
     </ Spinner >
</ LinearLayout >


上边的自定义View里面我用了个Spinner, 那Spinner的Item的布局, 借用了之前抽屉导航Item的布局drawer_item.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? xml  version = "1.0"  encoding = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:gravity = "center_vertical"
     android:orientation = "horizontal"  >
     < ImageView
         android:id = "@+id/drawer_img"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" />
     < TextView
         android:id = "@+id/drawer_title"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" />
</ LinearLayout >


布局准备好了, 接下来就是在Activity里面写一些.

首先是onCreate()方法里面准备一下.

1
2
3
4
5
6
7
8
9
10
11
12
/** action_bar添加自定义view */
View actionbarLayout = LayoutInflater.from( this ).inflate(R.layout.action_bar,  null );
mActionbarSpinne = (Spinner) actionbarLayout.findViewById(R.id.action_bar_spinner);
//setAdapter可以根据具体情况, 此处不必深究.
mActionbarSpinne.setAdapter( new  SimpleAdapter( this ,
         getDrawerItems( true ), R.layout.drawer_item,  new  String[] {
                 "drawer_img" "drawer_title"  },  new  int [] {
                 R.id.drawer_img, R.id.drawer_title }));
mActionbarSpinne.setOnItemSelectedListener( new  SpinnerItemSelectedListener());
//使自定义的普通View能在title栏显示, actionBar.setCustomView能起作用.
actionBar.setDisplayShowCustomEnabled( true );
actionBar.setCustomView(actionbarLayout);

然后Spinner Item选中时, 加个Listener

1
2
3
4
5
6
7
8
9
10
11
12
/**
  * 监听action_bar的spinner item选择事件
  */
private  class  SpinnerItemSelectedListener  implements  OnItemSelectedListener {
     @Override
     public  void  onItemSelected(AdapterView<?> arg0, View view,  int  position,
             long  arg3) {
         selectItem(view, position, MESSAGE_SPINNER_ITEM);
     }
     @Override
     public  void  onNothingSelected(AdapterView<?> arg0) {}
}

Listener的selectItem()细节如下

1
2
3
4
5
6
7
if  (messageId == MESSAGE_SPINNER_ITEM) {
             if  (position !=  0 ) {
                 TextView title = (TextView) view.findViewById(R.id.drawer_title);
                 String cityName = title.getText().toString();
                 this .cityInput.setText(cityName);
             }
         }


至此, 可以根据具体情况在Action bar上面自定义View


本文转自chainli 51CTO博客,原文链接:http://blog.51cto.com/lichen/1214291,如需转载请自行联系原作者

相关文章
|
1月前
|
缓存 前端开发 Android开发
安卓开发中的自定义视图:从零到英雄
【10月更文挑战第42天】 在安卓的世界里,自定义视图是一块画布,让开发者能够绘制出独一无二的界面体验。本文将带你走进自定义视图的大门,通过深入浅出的方式,让你从零基础到能够独立设计并实现复杂的自定义组件。我们将探索自定义视图的核心概念、实现步骤,以及如何优化你的视图以提高性能和兼容性。准备好了吗?让我们开始这段创造性的旅程吧!
26 1
|
2月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
95 0
|
1月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
40 2
|
1月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
1月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
37 5
|
2月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
2月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
38 2
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
27 2
|
2月前
|
Android开发
Android开发显示头部Bar的需求解决方案--Android应用实战
Android开发显示头部Bar的需求解决方案--Android应用实战
24 0