• 1.ActionBar



    ActionBar
    低版本和高版本用法不同

    低版本:
    1. 引用v7-appcompat
    2. Activity继承ActionBarActivity
    3. android:theme="@style/Theme.AppCompat.Light" >
    高版本:
    1. Activity自带actionBar
    2.从Android3.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"
          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:actionViewClass="android.support.v7.widget.SearchView"
              yourapp:showAsAction="ifRoom"/>
      				<!--	设置,	在溢出菜单中展示	-->
      				<item	android:id="@+id/action_settings"
      		android:title="@string/action_settings"
      		android:showAsAction="never"	/>
      
      </menu>
    2.写监听(错误可以忽略,判断下就可以了)
    1. @SuppressLint("NewApi")
      	@Override
      	public boolean onCreateOptionsMenu(Menu menu) {
      		getMenuInflater().inflate(R.menu.activity_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;
      	}
      

       

    3.处理actionBar菜单条目的点击事件
    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 onQueryTextSubmit(String query) {
    		Toast.makeText(getApplicationContext(), query, 0).show();
    		return true;
    	}
    	// 当搜索的文本发生变化
    	@Override
    	public boolean onQueryTextChange(String newText) {
    		return true;
    	}
    }
    

      

    @Override
    public	boolean	onOptionsItemSelected(MenuItem	item)	{
    				//	处理动作按钮的点击事件
    	switch	(item.getItemId())	{
    		case	R.id.action_search:
    		     openSearch();
    		    return	true;
    		case	R.id.action_settings:
    		    openSettings();
    		    eturn	true;
    		default:
    		   return	;
    super.onOptionsItemSelected(item);
        }
    }
     
    返回按钮的处理 
    在不是主要入口的其他所有屏中(activity不位于主屏时),需要在actionbar中为用户提供一个导航到逻辑父屏的up
    button(向上按钮)。
    1.在另一个activity
    1. 	protected void initActionBar() {
      		super.initActionBar();
      		ActionBar actionBar = getSupportActionBar();//通过这样或得actionbar
      		actionBar.setDisplayHomeAsUpEnabled(true);
      				//	如果你的minSdkVersion属性是11活更高,	应该这么用:
      				//	getActionBar().setDisplayHomeAsUpEnabled(true);
      	}
    2.清单文件中指定它的父亲(高版本就不需要写元数据了)
    1.   <activity  android:name=".DetailActivity"
                  android:label="@string/app_detail"
                   android:parentActivityName="com.itheima.googleplay.MainActivity"
                  >
                   <!-- Parent activity meta-data to support 4.0 and lower -->
              <meta-data
                  android:name="android.support.PARENT_ACTIVITY"
                  android:value="com.itheima.googleplay.MainActivity" />
              </activity>
    实现ActionBar  Tab标签
     1  在Drawable 目录下 写了一个标签的状态选择器(具体查文档)
    1. <!--	按钮没有按下的状态	-->
      				<!--	没有焦点的状态	-->
      				<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"	/>
      				<!--	有焦点的状态	(例如D-Pad控制或者鼠标经过)	-->
      				<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"	/>
      <!--		按钮按下的状态D	-->
      				<!--	没有焦点的状态	-->
      				<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"	/>
      				<!--有焦点的状态	(例如D-Pad控制或者鼠标经过)-->
      				<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  实现自定义主题 (想改的话改图片就行了)
    1. 	<?xml version="1.0" encoding="utf-8"?>
      	<resources>
      	     <!-- the theme applied to the application or activity -->
      	    <style name="CustomActionBarTheme"
      	           parent="@style/Theme.AppCompat.Light">
      //这里会报错,写着只有11以上能能用,可以先在清单文件中改成11,然后在改成低的就不报错了
      	    <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item> 
      	
      	        <!-- Support library compatibility -->
      	        <item name="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>
      	
      	        <!-- Support library compatibility -->
      	        <item name="background">@drawable/actionbar_tab_indicator</item>
      	    </style>
      	</resources>
     3  在代码里添加标签(删除、隐藏等操作改模式就行)
    1. 		ActionBar actionBar = getSupportActionBar();
      		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
      		Tab tab1=actionBar.newTab().setText("标签一").setTabListener(new MyTabListener());//需要这个接口,可以什么也不写
      		actionBar.addTab(tab1);
    DrawerLayout 
    在布局里这样写就行了
    1. <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/dl"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".MainActivity" >
          
          <!--如果抽屉没有打开 会显示线性布局  -->
      	<LinearLayout android:layout_width="match_parent"
      	    android:layout_height="match_parent">
          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/hello_world" />
          
          </LinearLayout>
           <!--  左面可以滑出来一个抽屉   -->
        <!--  
      	<RelativeLayout 
      	    android:layout_gravity="left"
      	    android:layout_width="match_parent"
      	    android:layout_height="match_parent"
      	    android:background="#ff0000">
      	    
      	</RelativeLayout> -->
      	<RelativeLayout 
      	    android:layout_gravity="right"
      	    android:layout_width="match_parent"
      	    android:layout_height="match_parent"
      	    android:background="#ffff00">
      	    
      	</RelativeLayout>
      </android.support.v4.widget.DrawerLayout>
      

        可以一进如程序就打开一个抽泣

    1. 	drawerLayout=(DrawerLayout) findViewById(R.id.dl);
      		drawerLayout.openDrawer(Gravity.RIGHT);//  打开左面抽屉
      

        

    ActionBarDrawerToggle  
      控制抽屉的开关, 显示在actionBar 上面 
    		ActionBar actionBar = getSupportActionBar();//如果是高版本直接getActionBar
    		actionBar.setDisplayHomeAsUpEnabled(true);
    		actionBar.setHomeButtonEnabled(true);
                1)显示Navigation Drawer的 Activity 对象
                2) DrawerLayout 对象
                3)一个用来指示Navigation Drawer的 drawable资源
                4)一个用来描述打开Navigation Drawer的文本 (用于支持可访问性)。
                5)一个用来描述关闭Navigation Drawer的文本(用于支持可访问性). 
    
    		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();
    		/** 处理actionBar菜单条目的点击事件 */
    		public boolean onOptionsItemSelected(MenuItem item) {
    			if (item.getItemId() == R.id.action_search) {
    				Toast.makeText(getApplicationContext(), "搜索", 0).show();
    			}
    	
    			return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
    		}
    

      

    切换ViewPager 
    actionbar的Tab不好看,可以用viewpager里的Tab,只需要嵌套这个PagerTabStrip就可以了
    如果的viewpager里是fragment,可以继承FragmentActivity 
    1. 	    <android.support.v4.view.ViewPager
      	        android:id="@+id/vp"
      	        android:layout_width="match_parent"
      	        android:layout_height="match_parent"
      	        android:layout_centerHorizontal="true"
      	        android:layout_centerVertical="true"
      	       >
      	        <android.support.v4.view.PagerTabStrip //这样viepager上面就有了Tab
      	        android:id="@+id/pager_tab_strip“
      	        android:layout_width="match_parent"
      	        android:layout_height="wrap_content"
      	        android:layout_gravity="top"
      	        android:background="#ffffff"
      	        android:textColor="#000"
      	        android:paddingTop="4dp"
      	        android:paddingBottom="4dp" />
      	        
      	        
      	    </android.support.v4.view.ViewPager>
      	private class MainAdpater extends FragmentStatePagerAdapter{
      		public MainAdpater(FragmentManager fm) {
      			super(fm);
      		}
      		// 每个条目返回的fragment
      		//  0
      		@Override
      		public Fragment getItem(int position) {
      			if(position==0){
      				return new HomeFragment();
      			}else{
      				return new AppFragment();//现在先这样写,其余的都显示这个fragment
      			}
      		}
      		// 一共有几个条目 
      		@Override
      		public int getCount() {
      			return 4;
      		}
      		// 返回每个条目的标题
      		@Override
      		public CharSequence getPageTitle(int position) {
      			return "标签"+position;
      		}
      		
      	}
      

        

      完整代码请看:2.代码抽取
     



  • 相关阅读:
    第三百二十八天 how can I 坚持
    第三百二十七天 how can I 坚持
    第三百二十六天 how can I 坚持
    第三百二十五天 how can I 坚持
    第三百二十四天 how can I 坚持
    第三百二十二天 how can I 坚持
    第三百二十一天 how can I 坚持
    第三百零八至三百二十天 how can I 坚持
    POJ 2346:Lucky tickets
    POJ 3461:Oulipo
  • 原文地址:https://www.cnblogs.com/sixrain/p/4928280.html
Copyright © 2020-2023  润新知