谷歌电子市场学习笔记第一天之上

一、环境搭建

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

全部代码下载地址:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上善若水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值