一、显示和隐藏Action Bar
要使用Action Bar的全部特性,最小SDK需11以上。
查看最小sdk的方法:Gradle.Scripts中build.gradle(app)中的minSdkVersion
在MainActivity.java文件中获取当前的Action Bar:
//获取ActionBar对象
final ActionBar actionBar=getSupportActionBar();
显示Action Bar:
actionBar.show();
隐藏Action Bar:
actionBar.hide();
二、添加Action Item
即在Action Bar的项。
添加Action Item的步骤
- 定义菜单资源文件
- 在OnCreateOptionsMenu()方法加载菜单资源文件。
定义资源:
在menu.xml设置item时:
1、android:showAsAction决定该菜单的显示位置:
always:显示在Action Bar上
ifRoom:如果有空间,则在Action Bar,无空间则在溢出菜单中。、
never:永远也不显示在Action Bar上。
withText:显示在Action Bar上,并显示文本。
2、 android:icon,控制显示图片。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="搜索"
app:showAsAction="always"/>
</menu>
重写OnCreateOptionsMenu()方法:
//重写onCreateOptionsMenu,解析菜单资源文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=new MenuInflater(this);
inflater.inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
三、添加Action View
进行搜索操作的组件。
实例:实现微信Action Bar上的搜索,通讯录、添加。
效果:
menu.xml文件
//特别注意actionViewClass、actionLayout、showAsAction的前缀都为自定义命名空间。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="搜索"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
<item android:id="@+id/img1"
android:title="通讯录"
app:actionLayout="@layout/img_message"
app:showAsAction="always"/>
<item android:id="@+id/img2"
android:title="添加"
app:actionLayout="@layout/img__add"
app:showAsAction="always"/>
</menu>
img_message.xml和img_add.xml(类似,只列出一个)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:src="@drawable/w11"/>
</LinearLayout>
MainActivity.java
package com.example.asus.demo;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//隐藏Action Bar标题。
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
//解析菜单资源文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
总结:
四、Action Bar与Tab
实现Tab导航Action Bar的步骤
- 设置使用Tab导航方式。
- 添加多个Tab标签页,并添加事件监听器。
实例:实现有道词典app的Tab导航的Action Bar
???方法过时了…mmp
五、实现层级式导航
模拟微信实现带向上导航按钮的Action Bar
效果:
布局文件省略
FriendActivity.java设置向上导航图标显示
package com.example.asus.demo3;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
public class FriendActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_friend);
//判断父Activity是否为空,不为空,设置导航图标显示
if(NavUtils.getParentActivityName(FriendActivity.this)!=null)
{
//设置显示向左的箭头图标
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
}
MainActivity.java文件实现跳转
package com.example.asus.demo3;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView= (ImageView) findViewById(R.id.img);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,FriendActivity.class);
startActivity(intent);
}
});
}
}
manifest文件实现层级式返回。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.asus.demo3">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".FriendActivity"
android:label="朋友圈">
<!-- value用来记住是从哪个Activity跳转过来的。-->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
</application>
</manifest>
总结: