ActionBar神奇魅力2

来源:互联网 发布:unpack php 编辑:程序博客网 时间:2024/05/01 18:39

4、可拓展的Item

看到那个放大镜了,就是一个可拓展试的Item,看xml 中的 menu_collapse。
他有俩个属性是android:actionLayout="@layout/collapsibleview" android:showAsAction="ifRoom|collapseActionView"
android:actionLayout="@layout/collapsibleview" 是点item后拓展成的View
android:showAsAction="collapseActionView"代表他是一个可拓展的Item

[java] view plaincopy
  1. Button btnn;  
  2. EditText editText;  
  3. private ShareActionProvider mShareActionProvider;  
  4.    
  5. @Override  
  6. public boolean onCreateOptionsMenu(Menu menu) {  
  7. // Inflate the menu; this adds items to the action bar if it is present.  
  8. getMenuInflater().inflate(R.menu.activity_main, menu);  
  9. // 给可折叠的view上的控件添加事件  
  10. LinearLayout viewGroup = (LinearLayout) menu.findItem(  
  11. R.id.menu_collapse).getActionView();  
  12. btnn = (Button) viewGroup.findViewById(R.id.colla_btn);  
  13. editText = (EditText) viewGroup.findViewById(R.id.colla_edit);  
  14. btnn.setOnClickListener(new OnClickListener() {  
  15. public void onClick(View v) {  
  16. // TODO Auto-generated method stub  
  17. Toast.makeText(getApplicationContext(),  
  18. editText.getText() + "~"0).show();  
  19. }  
  20. });  
  21. }  

可拓展的Item同时还支持一个拓展事件。只有在4.0以后的Api提供:

[java] view plaincopy
  1. MenuItem menuItem = menu.findItem(R.id.menu_collapse);  
  2. menuItem.setOnActionExpandListener(new OnActionExpandListener() {  
  3. @Override  
  4. public boolean onMenuItemActionExpand(MenuItem item) {  
  5. // TODO Auto-generated method stub  
  6. Toast.makeText(getApplicationContext(),  
  7. "onMenuItemActionExpand"0).show();  
  8. return true;  
  9. }  
  10.    
  11. @Override  
  12. public boolean onMenuItemActionCollapse(MenuItem item) {  
  13. // TODO Auto-generated method stub  
  14. Toast.makeText(getApplicationContext(),  
  15. "onMenuItemActionCollapse"0).show();  
  16. return true;  
  17. }  
  18. });  

5、自定义View

[java] view plaincopy
  1. mCustomView = getLayoutInflater().inflate(  
  2. R.layout.action_bar_display_options_custom, null);  
  3. mCustomView.setOnClickListener(new OnClickListener() {  
  4.    
  5. @Override  
  6. public void onClick(View v) {  
  7. // TODO Auto-generated method stub  
  8. Toast.makeText(getApplicationContext(), "自定义view"0).show();  
  9. }  
  10. });  
  11. actionBar.setCustomView(mCustomView, new ActionBar.LayoutParams(  
  12. LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  

九、ActionBar标签

1、ActionBar可以现实选项卡供用户切换浏览该Activity中不同的Fragment
2、每个标签都可以是一个图标或文本标题

[java] view plaincopy
  1. package com.xys.actionbar;  
  2.   
  3. import android.app.ActionBar;  
  4. import android.app.ActionBar.Tab;  
  5. import android.app.Activity;  
  6. import android.app.Fragment;  
  7. import android.app.FragmentTransaction;  
  8. import android.os.Bundle;  
  9.   
  10. public class MainActivity extends Activity  
  11. {  
  12.     /** Called when the activity is first created. */  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState)  
  15.     {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.activity_main);  
  18.         ActionBar bar = getActionBar();  
  19.         //设置为Tab模式  
  20.         bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  21.         //新建2个Tab  
  22.         ActionBar.Tab tabA = bar.newTab().setText("A Tab");  
  23.         ActionBar.Tab tabB = bar.newTab().setText("B Tab");  
  24.         //绑定到Fragment  
  25.         Fragment fragmentA = new AFragmentTab();  
  26.         Fragment fragmentB = new BFragmentTab();  
  27.         tabA.setTabListener(new MyTabsListener(fragmentA));  
  28.         tabB.setTabListener(new MyTabsListener(fragmentB));  
  29.         bar.addTab(tabA);  
  30.         bar.addTab(tabB);  
  31.     }  
  32.       
  33.     protected class MyTabsListener implements ActionBar.TabListener  
  34.     {  
  35.         private Fragment fragment;  
  36.         public MyTabsListener(Fragment fragment)  
  37.         {  
  38.             this.fragment = fragment;  
  39.         }  
  40.         @Override  
  41.         public void onTabSelected(Tab tab, FragmentTransaction ft)  
  42.         {  
  43.             ft.add(R.id.fragment_place, fragment, null);  
  44.         }  
  45.         @Override  
  46.         public void onTabReselected(Tab arg0, FragmentTransaction arg1) {  
  47.             // TODO Auto-generated method stub  
  48.               
  49.         }  
  50.         @Override  
  51.         public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {  
  52.             // TODO Auto-generated method stub  
  53.               
  54.         }  
  55.     }  
  56.       
  57. }  

AB Tab页面:

[java] view plaincopy
  1. package com.xys.actionbar;  
  2.   
  3. import android.app.Fragment;  
  4. import android.os.Bundle;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8.   
  9. public class AFragmentTab extends Fragment  
  10. {  
  11.     @Override  
  12.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  13.             Bundle savedInstanceState)  
  14.     {  
  15.         return inflater.inflate(R.layout.fragment_a, container, false);  
  16.     }  
  17. }  

布局:

activity_main.xml:相当于容器

[html] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <LinearLayout  
  7.         android:id="@+id/fragment_place"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content" >  
  10.     </LinearLayout>  
  11.   
  12. </LinearLayout>  
fragment_a.xml:每个fragment的布局:

[html] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <LinearLayout  
  7.         android:id="@+id/fragment_a"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content" >  
  10.     </LinearLayout>  
  11.   
  12. </LinearLayout>  

显示效果如图:

九-1、下拉模式

前面讲到了

[java] view plaincopy
  1. bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)  

这次我们使用下拉模式

[html] view plaincopy
  1. public class ActionBarTestActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     Button button1,button2;  
  4.      
  5.     ActionBar actionBar;  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.         actionBar=getActionBar();  
  10.         // 生成一个SpinnerAdapter         
  11.         SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.student, android.R.layout.simple_spinner_dropdown_item);  
  12.         // 将ActionBar的操作模型设置为NAVIGATION_MODE_LIST         
  13.         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);  
  14.      // 为ActionBar设置下拉菜单和监听器          
  15.         actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());  
  16.          
  17. class DropDownListenser implements OnNavigationListener      
  18. {          
  19.   // 得到和SpinnerAdapter里一致的字符数组         
  20.   String[] listNames = getResources().getStringArray(R.array.student);          
  21.   /* 当选择下拉菜单项的时候,将Activity中的内容置换为对应的Fragment */          
  22.   public boolean onNavigationItemSelected(int itemPosition, long itemId)          
  23.   {              
  24.    // 生成自定的Fragment              
  25.    Ftest student = new Ftest();              
  26.    FragmentManager manager = getFragmentManager();              
  27.    FragmentTransaction transaction = manager.beginTransaction();             
  28.    // 将Activity中的内容替换成对应选择的Fragment              
  29.    transaction.replace(android.R.id.content, student, listNames[itemPosition]);             
  30.    transaction.commit();              
  31.    return true;          
  32.        
  33.   }  

xml布局:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, ActionBarTestActivity!</string>  
  4.     <string name="app_name">ActionBarTest</string>  
  5.       
  6.       <string name="ActionBar_name">ActionBar下拉菜单</string>      
  7.        <string-array name="student">          
  8.            <item>item1</item>          
  9.            <item>item2</item>          
  10.            <item>item3</item>          
  11.            <item>item4</item>     
  12.            </string-array>  
  13. </resources>  

fragment:

[java] view plaincopy
  1. public class Ftest extends Fragment  
  2. {     
  3. // Fragment对应的标签,当Fragment依附于Activity时得到      
  4.   
  5. private String tag;      
  6. @Override     
  7. public void onAttach(Activity activity)      
  8. {          
  9.   super.onAttach(activity);          
  10.      tag = getTag();     
  11. }      
  12. @Override      
  13. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)      
  14. {          
  15. //  View view = (View) inflater.inflate(R.layout.ftest, container, false);         
  16. //  TextView textView=(TextView) view.findViewById(R.id.topView);  
  17. //  textView.setText(tag);  
  18.   TextView textView = new TextView(getActivity());         
  19.   textView.setText(tag);  
  20.   return textView;      
  21.     
  22. }  
  23. }  

效果图如下:

QQ截图20130128162215.png

十、ActionBar的美化

1、

[html] view plaincopy
  1. <style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">  
  2. <item name="android:windowActionBarOverlay">true</item>  
  3. <item name="android:background">@color/ab_background_color</item>  
  4. <item name="android:backgroundStacked">@color/ab_backgroundStacked_color</item>  
  5. <item name="android:backgroundSplit">@color/ab_backgroundSplit_color</item>  
  6. </style>  

item name="android:background:ActionBar本身的背景颜色。
item name="android:backgroundStacked":ActionBar被分离时Tab 的背景颜色。
item name="android:backgroundSplit":ActionBar Item 在分割到底部时的背景颜色。
item name="android:background:蓝色 item name="android:backgroundStacked":紫色 item name="android:backgroundSplit":绿色

7.jpg


2、其他选项的Style

Action items

android:actionButtonStyle

[html] view plaincopy
  1. <style name="Widget.Holo.ActionButton" parent="Widget.ActionButton">   
  2. <item name="android:minWidth">56dip</item>   
  3. <item name="android:gravity">center</item>   
  4. <item name="android:paddingLeft">12dip</item>   
  5. <item name="android:paddingRight">12dip</item>   
  6. <item name="android:scaleType">center</item>   
  7. </style>  

从上面的定义看出,它定义了Button的最小宽度、居中样式、左右padding以及图片的放缩方式。再看看该样式的父样式

[html] view plaincopy
  1. <style name="Widget.ActionButton">   
  2. <item name="android:background">?android:attr/actionBarItemBackground</item>   
  3. <item name="android:paddingLeft">12dip</item>   
  4. <item name="android:paddingRight">12dip</item>   
  5. <item name="android:minWidth">56dip</item>   
  6. <item name="android:minHeight">?android:attr/actionBarSize</item>   
  7. </style>  

7.jpg

android:actionBarItemBackground

定义显示的item选项的背景 Api 14以上可以使用android:itemBackground定义全部Item的背景选项
这俩个选项其实和定义actionBarButtonStyle的背景已经有覆盖 所以用的时候定义一个就行

android:actionBarDivider

样式属性actionBarDivider定义了ActionBar操作项之间的分隔条。可以看出,它直接引用了另一个ActionBar相关属性 dividerVertical,其定义如下:

[html] view plaincopy
  1. <item name="dividerVertical">@drawable/divider_vertical_dark</item>  

8.jpg

android:actionMenuTextColor
android:actionMenuTextAppearance
这俩个属性是定义menu item 文字大小和颜色

[html] view plaincopy
  1. <style name="myactionMenuTextAppearance" parent="@android:style/TextAppearance.Holo.Large">  
  2. <item name="android:textSize">20sp</item>  
  3. <item name="android:textStyle">bold</item>  
  4. <item name="android:textAllCaps">true</item>  
  5. </style>  
  6. <item name="android:actionMenuTextAppearance">@style/myactionMenuTextAppearance</item>  
  7. <item name="android:actionMenuTextColor">@color/ab_backgroundStacked_color</item>  

9.jpg

android:actionBarWidgetTheme 
Navigation tabs
android:actionBarTabStyle
样式属性 actionBarTabStyle 为Tab页的标签定义样式

[html] view plaincopy
  1. <style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView">   
  2. <item name="android:background">@drawable/tab_indicator_holo</item>   
  3. <item name="android:paddingLeft">16dip</item>   
  4. <item name="android:paddingRight">16dip</item>   
  5. </style>  
android:actionBarTabBarStyle
样式属性actionBarTabBarStyle 定义了Tab标签之间分隔条。

[html] view plaincopy
  1. <style name="Widget.Holo.ActionBar.TabBar" parent="Widget.ActionBar.TabBar">   
  2. <item name="android:divider">?android:attr/actionBarDivider</item>   
  3. <item name="android:showDividers">middle</item>   
  4. <item name="android:dividerPadding">12dip</item>   
  5. </style>  

android:actionBarTabTextStyle
样式属性 actionBarTabTextStyle 定义了Tab的文本样式,如下:

[html] view plaincopy
  1. <style name="Widget.Holo.ActionBar.TabText" parent="Widget.ActionBar.TabText">   
  2. <item name="android:textAppearance">@style/TextAppearance.Holo.Medium</item>   
  3. <item name="android:textColor">?android:attr/textColorPrimary</item>   
  4. <item name="android:textSize">12sp</item>   
  5. <item name="android:textStyle">bold</item>   
  6. <item name="android:textAllCaps">true</item>   
  7. <item name="android:ellipsize">marquee</item>   
  8. <item name="android:maxLines">2</item>   
  9. </style>  
android:actionDropDownStyle
样式属性 actionDropDownStyle 定义了下拉导航列表的样式,如下:

[html] view plaincopy
  1. <style name="Widget.Holo.Spinner.DropDown.ActionBar">   
  2. <item name="android:background">@android:drawable/spinner_ab_holo_dark</item>   
  3. </style>  

其父样式

[html] view plaincopy
  1. <style name="Widget.Holo.Spinner" parent="Widget.Spinner.DropDown">   
  2. <item name="android:background">@android:drawable/spinner_background_holo_dark</item>   
  3. <item name="android:dropDownSelector">@android:drawable/list_selector_holo_dark</item>   
  4. <item name="android:popupBackground">@android:drawable/menu_dropdown_panel_holo_dark</item>   
  5. <item name="android:dropDownVerticalOffset">0dip</item>   
  6. <item name="android:dropDownHorizontalOffset">0dip</item>   
  7. <item name="android:dropDownWidth">wrap_content</item>   
  8. <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>   
  9. <item name="android:gravity">left|center_vertical</item>   
  10. </style>  

说下ActionBar 总体系统提供的样式
样式属性actionBarStyle定义了ActionBar的基本样式。

[html] view plaincopy
  1. <style name="Widget.Holo.ActionBar" parent="Widget.ActionBar">   
  2. <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title</item>   
  3. <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item>   
  4. <item name="android:background">@android:drawable/ab_transparent_dark_holo</item>   
  5. <item name="android:backgroundStacked">@android:drawable/ab_stacked_transparent_dark_holo</item>   
  6. <item name="android:backgroundSplit">@android:drawable/ab_bottom_transparent_dark_holo</item>   
  7. <item name="android:divider">?android:attr/dividerVertical</item>   
  8. <item name="android:progressBarStyle">@android:style/Widget.Holo.ProgressBar.Horizontal</item>   
  9. <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.ProgressBar</item>   
  10. <item name="android:progressBarPadding">32dip</item>   
  11. <item name="android:itemPadding">8dip</item>   
  12. </style>   

其父样式

[html] view plaincopy
  1. <style name="Widget.ActionBar">   
  2. <item name="android:background">@android:drawable/action_bar_background</item>   
  3. <item name="android:displayOptions">useLogo|showHome|showTitle</item>   
  4. <item name="android:divider">@android:drawable/action_bar_divider</item>   
  5. <item name="android:height">?android:attr/actionBarSize</item>   
  6. <item name="android:paddingLeft">0dip</item>   
  7. <item name="android:paddingTop">0dip</item>   
  8. <item name="android:paddingRight">0dip</item>   
  9. <item name="android:paddingBottom">0dip</item>   
  10. <item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Title</item>   
  11. <item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionBar.Subtitle</item>   
  12. <item name="android:progressBarStyle">@android:style/Widget.ProgressBar.Horizontal</item>   
  13. <item name="android:indeterminateProgressStyle">@android:style/Widget.ProgressBar.Small</item>   
  14. <item name="android:homeLayout">@android:layout/action_bar_home</item>   
  15. </style>  

http://blog.csdn.net/x359981514/article/details/8688538

原创粉丝点击