ActionBar 和抽屉 的应用
来源:互联网 发布:进销存带人力资源软件 编辑:程序博客网 时间:2024/05/02 00:58
Action Bar 是Google 在Android 3.0之后推出的一种全新用户操作方式
目的是用来替换掉菜单按键功能,长按操作功能,提供一种全新的操作体验
ActionBar的组成
1. 应用的图标标题部分:包含了 图标,主标题,副标题,回退部分
2. 导航模式部分:这里显示的是导航模式中的List(导航模式有三种,标准,list,tab)
3. Action button 部分: 用来响应用户的点击事件
4. 溢出菜单部分:如果Action button拜访不下去了,会在此处显示
## ActionBar 低版本的支持
1. 导入Android Support V7 library
2. 将Activity 继承 ActionBarActivity
3. 给Activity 设置theme,主题需要是v7下的@style/Theme.AppComp.XXX
## ActionBar标题图标部分
用来显示标题和回退的
相关Api的使用
```java
// 获取ActionBar
mActionBar = getSupportActionBar();
mActionBar.setTitle("MainTitle");// 设置主title部分
mActionBar.setSubtitle("SubTitle");// 设置子title部分
mActionBar.setIcon(R.drawable.ic_launcher);// 设置应用图标
mActionBar.setDisplayShowTitleEnabled(true);// 设置菜单 标题是否可见
mActionBar.setDisplayShowHomeEnabled(true);// 设置应用图标是否
mActionBar.setDisplayUseLogoEnabled(false);// 设置是否显示Logo优先
mActionBar.setDisplayHomeAsUpEnabled(true);// 设置back按钮是否可见
```
## ActionBar的导航模式
1. 标准模式。默认情况下就是标准模式
2. List模式
* 通过ActionBar设置导航模式
```java
// actionBar的导航模式---List
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
```
* 在List模式下设置数据的适配以及监听
```java
// 初始化数据
final List<String> objects = new ArrayList<String>();
objects.add("主页");
objects.add("新闻");
objects.add("娱乐");
// 创建adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, objects);
// 创建监听
OnNavigationListener listener = new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long
itemId)
{
Toast.makeText(getApplicationContext(), objects.get(itemPosition) +
"", Toast.LENGTH_SHORT).show();
return false;
}
};
// 给ActionBar设置List导航模式下的数据适配和监听
mActionBar.setListNavigationCallbacks(adapter, listener);
```
3. Tab模式
* 通过ActionBar设置Tab模式
```java
// actionBar的导航模式---TAB
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
```
* 在Tab模式下设置数据的适配以及监听
```java
final List<Tab> mTabs = new ArrayList<ActionBar.Tab>();
for (int i = 0; i < 3; i++)
{
//创建tab
Tab tab = mActionBar.newTab();
tab.setText("tab" + (i + 1));
tab.setIcon(R.drawable.ic_launcher);
mTabs.add(tab);
//设置Tab的监听
tab.setTabListener(new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(getApplicationContext(), tab.getText() + "取消选中了",
Toast.LENGTH_SHORT).show();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(getApplicationContext(), tab.getText() + "选中了",
Toast.LENGTH_SHORT).show();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(getApplicationContext(), tab.getText() + "重新选中了",
Toast.LENGTH_SHORT).show();
}
});
//将tab添加到actionBar中
mActionBar.addTab(tab);
}
```
## Action button的相关操作
1. 创建Action button
* 复写 activity 的 onCreateOptionsMenu()方法
```java
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
// 将布局挂载到menu上
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
```
* 给menu创建对应的menu 的xml文件
```xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:heima="http://schemas.android.com/apk/res-auto" >
<item
android:icon="@drawable/ic_action_call"
android:orderInCategory="100"
android:title="呼叫"
heima:showAsAction="ifRoom"/>
<item
android:icon="@drawable/ic_action_cancel"
android:orderInCategory="100"
android:title="取消"
heima:showAsAction="ifRoom"/>
</menu>
```
> __低版本适配的说明:__
> * 在menu对应的xml文件的根节点,需要声明 自定义命名空间:
```code
xmlns:heima="http://schemas.android.com/apk/res-auto"
```
> * item中的属性 showAction 命名空间需要设置成自定义的
> __ShowAction的取值说明:__
> * always : 总是显示
> * ifroom : 如果放的下去,就显示(溢出菜单)
> * never : 从不显示
> * withText: 和文本一起显示
> * collapseActionView: 折叠显示
> __Menu菜单的类型:__
> * Group菜单
> * 子菜单
2. 响应Action Button 事件
* 复写onOptionsItemSelected()响应item事件
```java
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return super.onOptionsItemSelected(item);
}
```
## ActionBar Split显示
* 在清单文件中给Activity添加属性
```xml
android:uiOptions="splitActionBarWhenNarrow"
```
低版本支持时需要在Activity中添加meta元数据的支持
```xml
<meta-data
android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow" />
```
## Action Mode
![icon](img/action_mode.jpg)
1. 呼出Action Mode功能
```java
startActionMode(Callback);
```
低版本中
```java
startSupportActionMode(Callback);
```
2. Action Mode的回调(Callback)
```java
// 创建action mode时的回调
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
getMenuInflater().inflate(R.menu.action_mode, menu);
// 返回true说明有action mode
return true;
}
// 准备开始起时的回调
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
// TODO Auto-generated method stub
return true;
}
// action mode中的item被点击时的回调
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
{
return false;
}
//action mode 销毁时的回调
@Override
public void onDestroyActionMode(ActionMode mode)
{
Toast.makeText(this, "关闭了", Toast.LENGTH_SHORT).show();
目的是用来替换掉菜单按键功能,长按操作功能,提供一种全新的操作体验
ActionBar的组成
1. 应用的图标标题部分:包含了 图标,主标题,副标题,回退部分
2. 导航模式部分:这里显示的是导航模式中的List(导航模式有三种,标准,list,tab)
3. Action button 部分: 用来响应用户的点击事件
4. 溢出菜单部分:如果Action button拜访不下去了,会在此处显示
## ActionBar 低版本的支持
1. 导入Android Support V7 library
2. 将Activity 继承 ActionBarActivity
3. 给Activity 设置theme,主题需要是v7下的@style/Theme.AppComp.XXX
## ActionBar标题图标部分
用来显示标题和回退的
相关Api的使用
```java
// 获取ActionBar
mActionBar = getSupportActionBar();
mActionBar.setTitle("MainTitle");// 设置主title部分
mActionBar.setSubtitle("SubTitle");// 设置子title部分
mActionBar.setIcon(R.drawable.ic_launcher);// 设置应用图标
mActionBar.setDisplayShowTitleEnabled(true);// 设置菜单 标题是否可见
mActionBar.setDisplayShowHomeEnabled(true);// 设置应用图标是否
mActionBar.setDisplayUseLogoEnabled(false);// 设置是否显示Logo优先
mActionBar.setDisplayHomeAsUpEnabled(true);// 设置back按钮是否可见
```
## ActionBar的导航模式
1. 标准模式。默认情况下就是标准模式
2. List模式
* 通过ActionBar设置导航模式
```java
// actionBar的导航模式---List
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
```
* 在List模式下设置数据的适配以及监听
```java
// 初始化数据
final List<String> objects = new ArrayList<String>();
objects.add("主页");
objects.add("新闻");
objects.add("娱乐");
// 创建adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, objects);
// 创建监听
OnNavigationListener listener = new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long
itemId)
{
Toast.makeText(getApplicationContext(), objects.get(itemPosition) +
"", Toast.LENGTH_SHORT).show();
return false;
}
};
// 给ActionBar设置List导航模式下的数据适配和监听
mActionBar.setListNavigationCallbacks(adapter, listener);
```
3. Tab模式
* 通过ActionBar设置Tab模式
```java
// actionBar的导航模式---TAB
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
```
* 在Tab模式下设置数据的适配以及监听
```java
final List<Tab> mTabs = new ArrayList<ActionBar.Tab>();
for (int i = 0; i < 3; i++)
{
//创建tab
Tab tab = mActionBar.newTab();
tab.setText("tab" + (i + 1));
tab.setIcon(R.drawable.ic_launcher);
mTabs.add(tab);
//设置Tab的监听
tab.setTabListener(new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(getApplicationContext(), tab.getText() + "取消选中了",
Toast.LENGTH_SHORT).show();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(getApplicationContext(), tab.getText() + "选中了",
Toast.LENGTH_SHORT).show();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
Toast.makeText(getApplicationContext(), tab.getText() + "重新选中了",
Toast.LENGTH_SHORT).show();
}
});
//将tab添加到actionBar中
mActionBar.addTab(tab);
}
```
## Action button的相关操作
1. 创建Action button
* 复写 activity 的 onCreateOptionsMenu()方法
```java
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
// 将布局挂载到menu上
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
```
* 给menu创建对应的menu 的xml文件
```xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:heima="http://schemas.android.com/apk/res-auto" >
<item
android:icon="@drawable/ic_action_call"
android:orderInCategory="100"
android:title="呼叫"
heima:showAsAction="ifRoom"/>
<item
android:icon="@drawable/ic_action_cancel"
android:orderInCategory="100"
android:title="取消"
heima:showAsAction="ifRoom"/>
</menu>
```
> __低版本适配的说明:__
> * 在menu对应的xml文件的根节点,需要声明 自定义命名空间:
```code
xmlns:heima="http://schemas.android.com/apk/res-auto"
```
> * item中的属性 showAction 命名空间需要设置成自定义的
> __ShowAction的取值说明:__
> * always : 总是显示
> * ifroom : 如果放的下去,就显示(溢出菜单)
> * never : 从不显示
> * withText: 和文本一起显示
> * collapseActionView: 折叠显示
> __Menu菜单的类型:__
> * Group菜单
> * 子菜单
2. 响应Action Button 事件
* 复写onOptionsItemSelected()响应item事件
```java
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return super.onOptionsItemSelected(item);
}
```
## ActionBar Split显示
* 在清单文件中给Activity添加属性
```xml
android:uiOptions="splitActionBarWhenNarrow"
```
低版本支持时需要在Activity中添加meta元数据的支持
```xml
<meta-data
android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow" />
```
## Action Mode
![icon](img/action_mode.jpg)
1. 呼出Action Mode功能
```java
startActionMode(Callback);
```
低版本中
```java
startSupportActionMode(Callback);
```
2. Action Mode的回调(Callback)
```java
// 创建action mode时的回调
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
getMenuInflater().inflate(R.menu.action_mode, menu);
// 返回true说明有action mode
return true;
}
// 准备开始起时的回调
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
// TODO Auto-generated method stub
return true;
}
// action mode中的item被点击时的回调
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
{
return false;
}
//action mode 销毁时的回调
@Override
public void onDestroyActionMode(ActionMode mode)
{
Toast.makeText(this, "关闭了", Toast.LENGTH_SHORT).show();
}
下面就是抽屉的应用了:drawerLayout是Support Library包中实现了侧滑菜单效果的控件,drawerLayout直接分为侧边栏和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout的特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现),drawerLayout应该算是一个布局控件,跟LinearLayout等控件是没有生殖隔离的,只是drawerLayout带有滑动的功能。只要能满足drawerLayout的规定布局方式写完布局,就会有侧滑的效果。
<span style="font-family:SimSun;font-size:18px;"><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- 抽屉部分 --> <FrameLayout android:layout_width="180dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="#ff0000" > </FrameLayout> <!-- 内容部分 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.astuetz.PagerSlidingTabStrip xmlns:itheima="http://schemas.android.com/apk/res/org.itheima56.googleplay" android:id="@+id/main_tabs" android:layout_width="match_parent" android:layout_height="48dip" android:textSize="18dp" itheima:pstsIndicatorColor="@color/tab_indicator_selected" itheima:pstsIndicatorHeight="5dp" /> <android.support.v4.view.ViewPager android:id="@+id/main_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout></android.support.v4.widget.DrawerLayout></span>
0 0
- ActionBar 和抽屉 的应用
- actionBar和DrawerLayout的使用(抽屉布局)
- DrawerLayout抽屉和ActionBar结合
- ActionBar和Drawlayout的简单应用
- ActionBar 的应用
- ActionBar的应用
- 63 Android 抽屉效果的实现 + ActionBar Menu
- ActionBar简单使用介绍和Tab切换的应用
- Android actionBar的基本应用
- 关于ActionBar的简单应用
- ActionBar---ActionBar应用实战,高仿微信主界面的设计
- ActionBar、Drawerlayout、ActionBarDrawerToggle实现抽屉效果
- [4]ActionBar的简单应用
- 应用如何定制ActionBar的背景颜色
- Android应用标题栏(ActionBar)的去除
- Fragment和抽屉的布局文件
- actionbar和actionbar上title的颜色设置
- 抽屉原理之应用
- 分治策略
- Wordpress删除Redis页面缓存的方法
- nyist_1011 So Easy[II]
- 2.Java 程序与结构
- 使用libusb库笔记
- ActionBar 和抽屉 的应用
- Vector Multiplication with Map-Reduce
- dispatch_after的使用及iOS延时实现方法
- JavaScript实现的9大排序算法
- Ubuntu server 14.04 虚拟机的安装过程
- TimesTen 数据库复制学习:11. ASP带缓存组复制的几种固定架构模式
- spring tx:advice 和 aop:config 配置事务
- 结构型模式——适配器模式
- JAVA SOCKET学前知识点-内存