安卓开发_浅谈Action Bar
一、Action Bar
导航栏。是3.0之后出现的。
所以注意使用的时候清单文件要设置下
android:minSdkVersion="11"(至少11)
但如果使用v4包,则不需修改
二、ActionBar常用操作
1、删除Action Bar
因为3.0默认的主题默认创建Action Bar,所以只要设置下主题Theme.Holo.NoActionBar
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
2、隐藏Action Bar
ActionBar actionBar = getActionBar();
if(actionBar.isShowing())
actionBar.hide();
3、显示Action
ActionBar actionBar = getActionBar();
if(!actionBar.isShowing())
actionBar.show();
4、添加操作性,在ActionBar中显示菜单项
大致的实现步骤和菜单实现差不多,只需要修改 android:showAsAction 属性
(1)在res-menu文件夹下添加菜单项
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
android:id="@+id/action_call"
android:orderInCategory=""
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_call"
android:title="拨号"/>
<item
android:id="@+id/action_help"
android:orderInCategory=""
android:showAsAction="always|withText"
android:icon="@android:drawable/ic_menu_help"
android:title="帮助"/>
<item
android:id="@+id/action_camera"
android:orderInCategory=""
android:showAsAction="collapseActionView"
android:icon="@android:drawable/ic_menu_camera"
android:title="相机"/>
<item
android:id="@+id/action_delete"
android:orderInCategory=""
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_delete"
android:title="删除"/> </menu>
可以看出和以前创建菜单项的时候 android:showAsAction 属性发生了变化
android:showAsAction 有五个属性值
android:showAsAction="never" 不显示在ActionBar中(默认值)
android:showAsAction="always" 一定显示在ActionBar中
android:showAsAction="withText" 显示菜单项文字
android:showAsAction="ifRoom" 如果ActionBar有位置就显示
android:showAsAction="collapseActionView" 将该ActionView折叠成普通菜单项。最低API=
按钮响应事件还是onOptionsItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_call:
Toast.makeText(getApplicationContext(), "打电话",).show();
break;
case R.id.action_camera:
Toast.makeText(getApplicationContext(), "照相机",).show();
break;
case R.id.action_delete:
Toast.makeText(getApplicationContext(), "删除",).show();
break;
case R.id.action_help:
Toast.makeText(getApplicationContext(), "帮助",).show();
break; default:
break;
} return super.onOptionsItemSelected(item);
}
响应事件
效果图:
5、分割菜单栏
在API级别14以上(Android4.0),可以启用ActionBar的分隔操作栏模式,在屏幕的底部会显示一个独立的横条,用于显示Activity在窄屏或者竖屏上运行时的所有操作项
但是只是在底部显示所有的操作项,而导航条和标题元素依然留在顶部
在<application>或<activity>元素中添加uiOptions=”splitActionBarWhenNarrow”属性设置
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:uiOptions="splitActionBarWhenNarrow"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
效果图:
三、ActionBarTab.导航选项标签
你想要在一个Activity中提供导航选择标签时,使用操作栏的选项标签是一个非常好的选择,因为系统会调整操作栏选项标签来适应不同尺寸的屏幕的需要---在屏幕足够宽的时候,导航选项标签会被放到主操作栏中;当屏幕太窄的时候,选项标签会被放到一个分离的横条中
当宽度有足够的位置时,导航选项标签会被放到主操作栏中;
当屏幕太窄的时候,选项标签会被放到一个分离的横条中
创建导航标签步骤
* 使用ActionBar的Tab导航
* 1、设置ActionBar的导航模式为TABS
* 2、当前Activity实现ActionBar.TabListener接口(Tab的选择与取消等事件)
* 3、通过ActionBar类对象的newTab()来创建选项卡,同时设置显示的标题和事件监听
* 4、通过ActionBar类对象的addTab()方法,将创建的Tab增加到ActionBar中
* 5、设置ActionBar选择事件监听
看一个Demo ,
设置四个导航标签,点击一个导航标签,显示对应的Fragment
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu; public class MainActivity extends Activity implements TabListener { private ActionBar actionBar; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //不要忘记这两行,设置ActionBar的导航模式为TABS
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); initTab();
} private void initTab() {
// TODO Auto-generated method stub
actionBar.addTab(actionBar.newTab().setText("热点").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("军事").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("国内").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("国外").setTabListener(this));
} @Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub } @Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
//当ActionBar中某一Tab被选择,执行此方法,此时显示此Tab对应的Fragment
ContentFragment cf = ContentFragment.newInstance(tab.getText().toString());
ft.replace(R.id.showfragment, cf); } @Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
}
MainActivity
import java.util.List; import android.app.ListFragment;
import android.os.Bundle;
import android.widget.ArrayAdapter; public class MyFragment extends ListFragment{ private ArrayAdapter<String> adapter; public static MyFragment newInstance(String title)
{
MyFragment cf = new MyFragment();
Bundle arg = new Bundle();
arg.putString("title", title);
cf.setArguments(arg);
return cf; } @Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//给适配器添加数据
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
String title = getArguments().getString("title").toString();
for(int i=;i<;i++)
{
adapter.add(title+" "+i);
} } @Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
//给内置ListView设置适配器,一定要在onCreat()方法之后执行,因为在onCreat方法之后View才被创建
setListAdapter(adapter); } }
MyFragment
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/showfragment"
></FrameLayout>
</RelativeLayout>
layout
安卓开发_浅谈Action Bar的更多相关文章
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...
- 安卓开发_浅谈ContextMenu(上下文菜单)
长下文菜单,即长按view显示一个菜单栏 与OptionMenu的区别OptionMenu对应的是activity,一个activity只能拥有一个选项菜单ContextMenu对应的是View,每个 ...
- 安卓开发_浅谈Notification(通知栏)
Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...
- 安卓开发_浅谈ListView之分页列表
前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据 ...
- 安卓开发_浅谈Fragment之事务添加Fragment对象
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...
随机推荐
- 详解Android数据存储技术
前言 学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的.我们聊QQ,聊微信,看新闻,刷朋友圈等都是看 ...
- 第五篇: 路由网关(zuul)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统. 在Spring Cloud ...
- 利用ngnix解决跨域问题
一,定义 跨域是指从一个域名的网页去请求另一个域名的资源,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制.跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就 ...
- 正确使用AES对称加密
正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...
- Linux 环境下使用g++编译C++
单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include <iostream& ...
- Ubuntu 18.0.4安装Mongodb
2.21更新: 安装后本地通过robo 3T连接正常,但是其它机器通过IP连接时报错,继续查找,解决方案在这里(传送门),原因是mongodb安装完成后默认监听本地地址,也就是127.0.0.1,这样 ...
- docker配置仓储库时出错:无法安全地用该源进行更新,所以默认禁用该源
在Ubuntu上安装docker,配置仓储库时第一次使用了阿里去的镜像,如下 sudo add-apt-repository "deb [arch=amd64] http://mirrors ...
- eclipse clean和build作用
由于eclipse的编译是基于时间戳的判断机制的. 因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译. 因此你可以先clean一下再编译.这个时候eclipse ...
- Ubuntu 16.04下安装谷歌浏览器(转)
1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终端. 2.在终端中,输入以下命令,将下载源加入到系统的源列表. sudo wget http://www ...
- 常用的.NET开源项目(转)
Json.NET http://json.codeplex.com/ Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Lin ...