码迷,mamicode.com
首页 > 其他好文 > 详细

1.ActionBar

时间:2015-11-01 19:19:15      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

搭建环境
1. 安装genymotion模拟器 
2. 安装WebServer
3. 在sd卡的根目录下 防止WebInfos 文件夹

ActionBar
低版本和高版本用法不同
低版本:
1. 引用v7-appcompat
2. Activity继承ActionBarActivity
3. android:theme="@style/Theme.AppCompat.Light" >
高版本:
1. Activity自带actionBar
2. Android 3.0(APIlever11)开始,所有使用Theme.Holo主题(或者它的子类)的activity都包含了 actionbar,当
targetSdkVersion minSdkVersion属性被设置成 “11” 或更大时,它是默认主题。
所以,为你的 activity 添加 actionbar,只需简单地设置属性为 11或者更大。

常用操作:
搜索 
Actionbar 允许你为当前上下文中最重要的操作添加按钮。那些直接出现在actionbar中的icon 和/或文本被称作action
buttons(操作按钮)。安排不下的或不足够重要的操作被隐藏在actionoverflow 中。
1.所有的操作按钮和actionoverflow中其他可用的条目都被定义在菜单资源的XML文件中。通过在项目的res/menu目录中
新增一个XML文件来为actionbar 添加操作。(V7、V4只是功能功能不一样,没有升级的说法,要兼容低版本就要全部导V7的包,另外需要自定义命名空间)
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
  3. <!-- Search, should appear as action button -->
  4. <item
  5. android:id="@+id/action_search"
  6. android:icon="@drawable/ic_action_search"
  7. android:title="@string/action_search"
  8. yourapp:actionViewClass="android.support.v7.widget.SearchView"
  9. yourapp:showAsAction="ifRoom"/>
    1. <!-- 设置, 在溢出菜单中展示 -->
    2. <item android:id="@+id/action_settings"
    3. android:title="@string/action_settings"
    4. android:showAsAction="never" />

  10. </menu>
2.写监听(错误可以忽略,判断下就可以了)
  1. @SuppressLint("NewApi")
  2. @Override
  3. public boolean onCreateOptionsMenu(Menu menu) {
  4. getMenuInflater().inflate(R.menu.activity_main, menu);
  5. // 如果运行的环境 (部署到什么版本的手机 )大于3.0
  6. if (android.os.Build.VERSION.SDK_INT > 11) {
  7. SearchView searchView = (SearchView) menu.findItem(
  8. R.id.action_search).getActionView();
  9. searchView.setOnQueryTextListener(this);// 搜索的监听
  10. }
  11. return true;
  12. }
3.处理actionBar菜单条目的点击事件
  1. public boolean onOptionsItemSelected(MenuItem item) {
  2. if (item.getItemId() == R.id.action_search) {
  3. Toast.makeText(getApplicationContext(), "搜索", 0).show();
  4. }
  5. return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
  6. }
  7. // 当搜索提交的时候
  8. @Override
  9. public boolean onQueryTextSubmit(String query) {
  10. Toast.makeText(getApplicationContext(), query, 0).show();
  11. return true;
  12. }
  13. // 当搜索的文本发生变化
  14. @Override
  15. public boolean onQueryTextChange(String newText) {
  16. return true;
  17. }
  18. }
  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. // 处理动作按钮的点击事件
  4. switch (item.getItemId()) {
  5. case R.id.action_search:
  6. openSearch();
  7. return true;
  8. case R.id.action_settings:
  9. openSettings();
  10. return true;
  11. default:
  12. return super.onOptionsItemSelected(item);
  13. }
  14. }
返回按钮的处理 
在不是主要入口的其他所有屏中(activity不位于主屏时),需要在 actionbar中为用户提供一个导航到逻辑父屏的up
button(向上按钮)。
1.在另一个activity
  1. protected void initActionBar() {
  2. super.initActionBar();
  3. ActionBar actionBar = getSupportActionBar();//通过这样或得actionbar
  4. actionBar.setDisplayHomeAsUpEnabled(true);
  5. // 如果你的minSdkVersion属性是11活更高, 应该这么用: // getActionBar().setDisplayHomeAsUpEnabled(true);
  6. }
2.清单文件中指定它的父亲(高版本就不需要写元数据了)
  1. <activity android:name=".DetailActivity"
  2. android:label="@string/app_detail"
  3. android:parentActivityName="com.itheima.googleplay.MainActivity"
  4. >
  5. <!-- Parent activity meta-data to support 4.0 and lower -->
  6. <meta-data
  7. android:name="android.support.PARENT_ACTIVITY"
  8. android:value="com.itheima.googleplay.MainActivity" />
  9. </activity>
实现ActionBar  Tab标签
 1  在Drawable 目录下 写了一个标签的状态选择器(具体查文档)
  1. <!-- 按钮没有按下的状态 -->
  2. <!-- 没有焦点的状态 -->
  3. <item android:state_focused="false" android:state_selected="false"
  4. android:state_pressed="false"
  5. android:drawable="@drawable/tab_unselected" />
  6. <item android:state_focused="false" android:state_selected="true"
  7. android:state_pressed="false"
  8. android:drawable="@drawable/tab_selected" />
  9. <!-- 有焦点的状态 (例如D-Pad控制或者鼠标经过) -->
  10. <item android:state_focused="true" android:state_selected="false"
  11. android:state_pressed="false"
  12. android:drawable="@drawable/tab_unselected_focused" />
  13. <item android:state_focused="true" android:state_selected="true"
  14. android:state_pressed="false"
  15. android:drawable="@drawable/tab_selected_focused" />
  16. <!-- 按钮按下的状态D -->
  17. <!-- 没有焦点的状态 -->
  18. <item android:state_focused="false" android:state_selected="false"
  19. android:state_pressed="true"
  20. android:drawable="@drawable/tab_unselected_pressed" />
  21. <item android:state_focused="false" android:state_selected="true"
  22. android:state_pressed="true"
  23. android:drawable="@drawable/tab_selected_pressed" />
  24. <!--有焦点的状态 (例如D-Pad控制或者鼠标经过)-->
  25. <item android:state_focused="true" android:state_selected="false"
  26. android:state_pressed="true"
  27. android:drawable="@drawable/tab_unselected_pressed" />
  28. <item android:state_focused="true" android:state_selected="true"
  29. android:state_pressed="true"
  30. android:drawable="@drawable/tab_selected_pressed" />
  31. </selector>

 2  实现自定义主题 (想改的话改图片就行了)
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <!-- the theme applied to the application or activity -->
  4. <style name="CustomActionBarTheme"
  5. parent="@style/Theme.AppCompat.Light">
  6. //这里会报错,写着只有11以上能能用,可以先在清单文件中改成11,然后在改成低的就不报错了
  7. <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
  8. <!-- Support library compatibility -->
  9. <item name="actionBarTabStyle">@style/MyActionBarTabs</item>
  10. </style>
  11. <!-- ActionBar tabs styles -->
  12. <style name="MyActionBarTabs"
  13. parent="@style/Widget.AppCompat.ActionBar.TabView">
  14. <!-- tab indicator -->
  15. <item name="android:background">@drawable/actionbar_tab_indicator</item>
  16. <!-- Support library compatibility -->
  17. <item name="background">@drawable/actionbar_tab_indicator</item>
  18. </style>
  19. </resources>
 3  在代码里添加标签(删除、隐藏等操作改模式就行)
  1. ActionBar actionBar = getSupportActionBar();
  2. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
  3. Tab tab1=actionBar.newTab().setText("标签一").setTabListener(new MyTabListener());//需要这个接口,可以什么也不写
  4. actionBar.addTab(tab1);
DrawerLayout 
在布局里这样写就行了
  1. <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:id="@+id/dl"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. tools:context=".MainActivity" >
  7. <!--如果抽屉没有打开 会显示线性布局 -->
  8. <LinearLayout android:layout_width="match_parent"
  9. android:layout_height="match_parent">
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="@string/hello_world" />
  14. </LinearLayout>
  15. <!-- 左面可以滑出来一个抽屉 -->
  16. <!--
  17. <RelativeLayout
  18. android:layout_gravity="left"
  19. android:layout_width="match_parent"
  20. android:layout_height="match_parent"
  21. android:background="#ff0000">
  22. </RelativeLayout> -->
  23. <RelativeLayout
  24. android:layout_gravity="right"
  25. android:layout_width="match_parent"
  26. android:layout_height="match_parent"
  27. android:background="#ffff00">
  28. </RelativeLayout>
  29. </android.support.v4.widget.DrawerLayout>
可以一进如程序就打开一个抽泣
  1. drawerLayout=(DrawerLayout) findViewById(R.id.dl);
  2. drawerLayout.openDrawer(Gravity.RIGHT);// 打开左面抽屉
ActionBarDrawerToggle  
  控制抽屉的开关, 显示在actionBar 上面 
  1. ActionBar actionBar = getSupportActionBar();//如果是高版本直接getActionBar
  2. actionBar.setDisplayHomeAsUpEnabled(true);
  3. actionBar.setHomeButtonEnabled(true);
  4.             1)显示Navigation Drawer的 Activity 对象
                2) DrawerLayout 对象
                3)一个用来指示Navigation Drawer的 drawable资源
                4)一个用来描述打开Navigation Drawer的文本 (用于支持可访问性)。
                5)一个用来描述关闭Navigation Drawer的文本(用于支持可访问性). 

  5. drawerToggle = new ActionBarDrawerToggle(this,
  6. mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
  7. R.string.close_drawer){
  8. @Override
  9. public void onDrawerClosed(View drawerView) {
  10. super.onDrawerClosed(drawerView);
  11. Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
  12. }
  13. @Override
  14. public void onDrawerOpened(View drawerView) {
  15. super.onDrawerOpened(drawerView);
  16. Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
  17. }
  18. };
  19. mDrawerLayout.setDrawerListener(drawerToggle);
  20. // 让开关和actionbar建立关系
  21. drawerToggle.syncState();
  22. /** 处理actionBar菜单条目的点击事件 */
  23. public boolean onOptionsItemSelected(MenuItem item) {
  24. if (item.getItemId() == R.id.action_search) {
  25. Toast.makeText(getApplicationContext(), "搜索", 0).show();
  26. }
  27. return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
  28. }
切换ViewPager 
actionbar的Tab不好看,可以用viewpager里的Tab,只需要嵌套这个PagerTabStrip就可以了
如果的viewpager里是fragment,可以继承FragmentActivity 
  1. <android.support.v4.view.ViewPager
  2. android:id="@+id/vp"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:layout_centerHorizontal="true"
  6. android:layout_centerVertical="true"
  7. >
  8. <android.support.v4.view.PagerTabStrip //这样viepager上面就有了Tab
  9. android:id="@+id/pager_tab_strip“
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_gravity="top"
  13. android:background="#ffffff"
  14. android:textColor="#000"
  15. android:paddingTop="4dp"
  16. android:paddingBottom="4dp" />
  17. </android.support.v4.view.ViewPager>
  18. private class MainAdpater extends FragmentStatePagerAdapter{
  19. public MainAdpater(FragmentManager fm) {
  20. super(fm);
  21. }
  22. // 每个条目返回的fragment
  23. // 0
  24. @Override
  25. public Fragment getItem(int position) {
  26. if(position==0){
  27. return new HomeFragment();
  28. }else{
  29. return new AppFragment();//现在先这样写,其余的都显示这个fragment
  30. }
  31. }
  32. // 一共有几个条目
  33. @Override
  34. public int getCount() {
  35. return 4;
  36. }
  37. // 返回每个条目的标题
  38. @Override
  39. public CharSequence getPageTitle(int position) {
  40. return "标签"+position;
  41. }
  42. }







1.ActionBar

标签:

原文地址:http://www.cnblogs.com/liuyu0529/p/4928280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!