参考android模拟器的ApiDemo == Action Bar == Action Bar Usage
引入示例程序的方法“new - project - Android - Android示例项目 - 选择一个版本
使用动作条的步骤:
1.引用v7-appcompat
2. Activity继承ActionBarActivity
3. Manifist 文件中android:theme =“@ style / Theme.AppCompat.Light”>
4.在res /菜单文件夹中的main.xml文件
文件中yourapp可以自己随便写,这里是设置动作条的条目,这里只添加了一个条目--search(需要在字符串中添加对应条目)
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
yourapp:showAsAction="ifRoom"
yourapp:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
需要在RES /价值/字符串中添加一个标题
<string name="action_search">search</string>
接着,重写活动的onCreateOptionsMenu()方法,代码如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main,menu);
super.onCreateOptionsMenu(menu);
}
响应操作按钮的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.action_compose:
Toast.makeText(this,“Compose”,Toast.LENGTH_SHORT).show();
return true;
case R.id.action_delete:
Toast.makeText(this,“Delete”,Toast.LENGTH_SHORT).show();
return true;
case R.id.action_settings:
Toast.makeText(this,“Settings”,Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
主逻辑文件ActivityMain.java实现了搜索的点击,以及监听,通过的onClick实现跳转package com.ldw.market;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements OnQueryTextListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//初始化ActionBar的界面
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// 如果运行的环境 (部署到什么版本的手机 )大于3.0,低版本的不支持
if (android.os.Build.VERSION.SDK_INT > 11) {
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);// 搜索的监听
}
return true;
}
public void click(View v){
Intent intent = new Intent(getApplicationContext(), DetailActivity.class);
startActivity(intent);
}
/** 处理actionBar菜单条目的点击事件 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
System.out.println("所有");
//当前点击的条目是search
if (item.getItemId() == R.id.action_search) {
Toast.makeText(getApplicationContext(), "搜索", 0).show();
}
return super.onOptionsItemSelected(item);
}
// 当搜索提交的时候
@Override
public boolean onQueryTextChange(String arg0) {
Toast.makeText(getApplicationContext(), arg0, 0).show();
return false;
}
// 当搜索的文本发生变化
@Override
public boolean onQueryTextSubmit(String arg0) {
Toast.makeText(getApplicationContext(), arg0, 0).show();
return false;
}
}
修改跳转的Activity跳转的标题ActionBar
首先在res/values/strings.xml中添加一个label
<string name="app_detail">应用详情</string>
然后在Manifist文件中重新设置label,如果不设置的时候就是默认的label
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ldw.market"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name="com.ldw.market.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 左侧收缩栏 -->
<activity android:name="com.ldw.market.DetailActivity"
android:label="@string/app_detail"
/>
</application>
</manifest>
跳转成功以后,实现点击图标就关闭activity有2种方法一种是代码中实现,另一种是清单文件中配置
第一种:
DetalActivity.java中监听图标的点击然后调用finish(),同时需要设置 actionBar.setDisplayHomeAsUpEnabled(true);
package com.ldw.market;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.widget.Toast;
public class DetailActivity extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
//获取到actionBar,使用getSupportActionBar,getActionBar是android.app下面的getActionBar
ActionBar actionBar = getSupportActionBar();
//图标的显示与隐藏,显示返回按钮
actionBar.setDisplayHomeAsUpEnabled(true);
}
/** 处理actionBar菜单条目的点击事件,实现点击图标来隐藏当前的界面 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
System.out.println("所有");
//当前点击的条目是search
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
}
第二种方法是清单文件中配置,给当前的activity配置一个parentActivityName,这样就直接返回parentActivityName,但是仍然需要设置 actionBar.setDisplayHomeAsUpEnabled(true);
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ldw.market"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name="com.ldw.market.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 左侧收缩栏 -->
<activity android:name="com.ldw.market.DetailActivity"
android:label="@string/app_detail"
android:parentActivityName="com.ldw.market.MainActivity"
>
<! - 父活动元数据支持4.0及更低 - >
<元数据
机器人:名字= “android.support.PARENT_ACTIVITY”
android:value =“com.ldw.market.MainActivity”/>
</活动>
</应用>
</清单>