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();

}


下面就是抽屉的应用了:drawerLayoutSupport 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
原创粉丝点击