一、环境搭建
1.安装最火、最快的Android模拟器:genymotion模拟器
2.安装服务器WebServer(里面是假数据)
3.在sd卡的根目录下放置WebInfos文件夹
二、ActionBar的显示
活动条(ActionBar)是Android3.0的重要更新之一。ActionBar位于传统标题栏的位置,也就是显示的屏幕的顶部。ActionBar可显示应用的图标和Activity标题——也就是前面应用程序的顶部显示的内容。除此之外,ActionBar的右边还可以显示活动项(Action Item)。
- Action Bar设计概念在Android3.0(APP 11)中被Google引入以后,在4.0版本之后更是被Google纳入设计规范中,从Google的各大App中都可以看到这种设计。
- 兼容低版本
- 引入android-support-v7-appcompat
- ActionBarCompat在使用中会调用一些资源文件,尤其是基于Theme.Appcompat的主题(Theme)用来规范Action Bar的显示。如果使用Action Bar的Activity没有使用基于Theme.Appcompat的主题,程序就不知道该如何配制Action Bar的显示,就会报错导致程序退出。
- 继承ActionBarActivity
步骤:
1.引用v7-appcompat
2.Activity继承ActionBarActivity
3.android:theme="@/style/Theme.AppCompat.Lighr"
代码实现:
MainActivity.java
package com.xbmu.google;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
在项目清单文件(AndroidManifest.xm)中的Application标签里修改:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name="com.xbmu.google.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>
</application>
运行效果:
三、ActionBar的搜素
学习参考Api Demos中的代码:
首先看一下Api Demos中Action Bar的搜素的案例:
将Api Demos的工程导入开发工具中,找到代码:
四、搜素功能
在我们项目中实现搜素功能:
参考Android开发文档:
http://wear.techbrood.com/
res/menu/main_activity_actions.xml
MainActivity.java
package com.xbmu.google;
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.MenuInflater;
import android.view.MenuItem;
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);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);//设置搜素的监听事件
return true;
}
/**处理actionBar菜单条目的点击事件*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_search){
Toast.makeText(getApplicationContext(), "搜素", 0).show();
}
return super.onOptionsItemSelected(item);
}
//当搜素文本发生变化的时候
@Override
public boolean onQueryTextChange(String newText) {
Toast.makeText(getApplicationContext(), newText, 0).show();
return false;
}
//当搜素提交的时候
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(getApplicationContext(), query, 0).show();
return false;
}
}
运行效果:
五、ActionBar返回按钮的处理
详情页面DetailActivity.java
package com.xbmu.google;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
public class DetailActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
}
}
activity_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="详情页面"
android:layout_centerInParent="true"
/>
</RelativeLayout>
在清单文件中声明:
<activity
android:name="com.xbmu.google.DetailActivity"
android:label="@string/app_detail"
android:parentActivityName="com.xbmu.google.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.xbmu.google.MainActivity" />
</activity>
MainActivity.java:
package com.xbmu.google;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
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.MenuInflater;
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 actionBar = getSupportActionBar();
//设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头。
actionBar.setDisplayHomeAsUpEnabled(true);
}
public void jump(View view){
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent);
}
//......
}
activity_main.xml:
<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" >
<Button android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳转到详情页面"
android:onClick="jump"/>
</RelativeLayout>
运行效果图:
六、给ActionBar添加tab标签
1.在Drawable目录下写一个标签的状态选择器
res/drawable/actionbar_tab_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- STATES WHEN BUTTON IS NOT PRESSED -->
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/tab_unselected" />
<item android:state_focused="false" android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/tab_selected" />
<!-- Focused states (such as when focused with a d-pad or mouse hover) -->
<item android:state_focused="true" android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/tab_unselected_focused" />
<item android:state_focused="true" android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/tab_selected_focused" />
<!-- STATES WHEN BUTTON IS PRESSED -->
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false"
android:state_pressed="true"
android:drawable="@drawable/tab_unselected_pressed" />
<item android:state_focused="false" android:state_selected="true"
android:state_pressed="true"
android:drawable="@drawable/tab_selected_pressed" />
<!-- Focused states (such as when focused with a d-pad or mouse hover) -->
<item android:state_focused="true" android:state_selected="false"
android:state_pressed="true"
android:drawable="@drawable/tab_unselected_pressed" />
<item android:state_focused="true" android:state_selected="true"
android:state_pressed="true"
android:drawable="@drawable/tab_selected_pressed" />
</selector>
2.实现自定义主题:
res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@style/Theme.AppCompat.Light">
<item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
</style>
<!-- ActionBar tabs styles -->
<style name="MyActionBarTabs"
parent="@style/Widget.AppCompat.ActionBar.TabView">
<!-- tab indicator -->
<item name="android:background">@drawable/actionbar_tab_indicator</item>
</style>
</resources>
3.在MainActivity.java中添加标签代码:
package com.xbmu.google;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBar.TabListener;
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.MenuInflater;
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 actionBar = getSupportActionBar();
//设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头。
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab1 = actionBar.newTab().setText("标签一").setTabListener(new MyTabListener());
actionBar.addTab(tab1);
Tab tab2 = actionBar.newTab().setText("标签二").setTabListener(new MyTabListener());
actionBar.addTab(tab2);
Tab tab3 = actionBar.newTab().setText("标签三").setTabListener(new MyTabListener());
actionBar.addTab(tab3);
Tab tab4 = actionBar.newTab().setText("标签四").setTabListener(new MyTabListener());
actionBar.addTab(tab4);
Tab tab5 = actionBar.newTab().setText("标签五").setTabListener(new MyTabListener());
actionBar.addTab(tab5);
}
private class MyTabListener implements TabListener{
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
}
public void jump(View view){
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent);
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, 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;
}
/**处理actionBar菜单条目的点击事件*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_search){
Toast.makeText(getApplicationContext(), "搜素", 0).show();
}
return super.onOptionsItemSelected(item);
}
//当搜素文本发生变化的时候
@Override
public boolean onQueryTextChange(String newText) {
Toast.makeText(getApplicationContext(), newText, 0).show();
return false;
}
//当搜素提交的时候
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(getApplicationContext(), query, 0).show();
return false;
}
}
运行效果:
七、抽屉&抽屉的开关
布局文件activity_main.xml
<android.support.v4.widget.DrawerLayout 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:id="@+id/dl">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@drawable/bg_tab" />
</android.support.v4.widget.DrawerLayout>
MainActivity.java:
package com.xbmu.google;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBar.TabListener;
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.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements
OnQueryTextListener {
private ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
ActionBar actionBar = getSupportActionBar();
//设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头。
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab1 = actionBar.newTab().setText("标签一").setTabListener(new MyTabListener());
actionBar.addTab(tab1);
Tab tab2 = actionBar.newTab().setText("标签二").setTabListener(new MyTabListener());
actionBar.addTab(tab2);
Tab tab3 = actionBar.newTab().setText("标签三").setTabListener(new MyTabListener());
actionBar.addTab(tab3);
Tab tab4 = actionBar.newTab().setText("标签四").setTabListener(new MyTabListener());
actionBar.addTab(tab4);
Tab tab5 = actionBar.newTab().setText("标签五").setTabListener(new MyTabListener());
actionBar.addTab(tab5);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);//设置是否将应用程序图标转变成可点击的按钮
drawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, R.drawable.ic_drawer_am, //
R.string.open_drawer, R.string.close_drawer){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
//让开关和actionBar建立关系
drawerToggle.syncState();
}
private class MyTabListener implements TabListener {
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
}
public void jump(View view) {
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent);
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, 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;
}
/** 处理actionBar菜单条目的点击事件 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_search) {
Toast.makeText(getApplicationContext(), "搜素", 0).show();
}
return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
}
// 当搜素文本发生变化的时候
@Override
public boolean onQueryTextChange(String newText) {
Toast.makeText(getApplicationContext(), newText, 0).show();
return false;
}
// 当搜素提交的时候
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(getApplicationContext(), query, 0).show();
return false;
}
}
运行效果图:
以上关于ActionBar的使用可以参考
http://wear.techbrood.com/training/basics/actionbar/index.html
全部代码下载地址: