zoukankan      html  css  js  c++  java
  • Android活动条(actionbar)使用具体解释(一)

        活动条(ActionBar)是Android3.0的重要更新之中的一个。ActionBar位于传统标题的位置,其主要提供了例如以下功能:
        >显示选项菜单的菜单项,即激昂菜单项显示在Action Item;
        >使用程序图标作为返回Home主屏或向上的导航操作;
        >提供交互式View作为Action View;
        >提供基于Tab的导航方式。可用于切换多个Fragment
        >提供基于下拉的导航方式
    1.启用/关闭ActionBar
        Android3.0及以上版本号已经默认启用了ActionBar。仅仅须要在AndroidManifest.xml文件的SDK配置指定Android版本号高于11就会默认启用ActionBar,代码例如以下:
        <uses-sdk
            android:minSdkVersion="17"
            android:targetSdkVersion="17" />
    在实际项目中。通常推荐使用代码来控制ActionBar的显示、隐藏,代码实现例如以下:
        ActionBar actionBar = getActionBar();        //返回ActionBar实例
         actionBar.show();                                        //显示
        actionBar.hide();                                            //隐藏
    当然。仅仅有当应用主题没有关闭ActionBar时才干返回ActionBar实例。

    假设设置应用主题或Activity的主题属性Android:name="@android:style/Theme.Holo.NoActionBar"。则关闭ActionBar活动条功能。

    注意:在使用ActionBar过程中。明明我们将Android的SDK版本号设置大于3.0,可是仍不能实如今标题栏显示ActionBar或者getActionBar()返回的null。这是因为Android应用的主题的错误,有两种方法:
    (1)在新建项目时,设置Android版本号高于3.0


    (2)删除AndroidManifest.xml清单文件<Application.../>元素中的Android:theme属性,然后在Activity代码中加入getWindow().requestFeature(Window.FEATURE_ACTION_BAR);就可以
    2.使用ActionBar显示选项菜单
        因为有些手机不存在MENU按键。Android提供了ActionBar将选项菜单显示成Action Item。从Android 3.0開始,MenuItem新增例如以下方法用于将菜单选项显示在ActionBar上作为ActionItem。

    ActionBar还能够依据应用程序当前的功能来提供与其相关的Actionbutton,这些button都会以图标或文字的形式直接显示在ActionBar上。

    当然。假设button过多,ActionBar上显示不完。多出的一些button能够隐藏在overflow里面(最右边的三个点就是overflowbutton),点击一下overflowbutton就能够看到全部的Actionbutton了。 当Activity启动的时候。系统会调用Activity的onCreateOptionsMenu()方法来取出全部的Actionbutton,我们仅仅须要在这种方法中去载入一个menu资源(menu/*.xml)。并把全部的Actionbutton都定义在资源文件中面就能够了

        setShowAsAction(int actionEnum)
        该方法设置是否将该菜单显示在ActionBar上。作为ActionItem。当中,actionEnum方法支持例如以下參数值:
        >SHOW_AS_ACTION_ALWAYS:总是将该MenuItem显示在ActionBar上;
        >SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该Action View折叠成普通菜单项
        >SHOW_AS_ACTION_IF_ROOM:当ActionBar位置足够时才显示MenuItem
        >SHOW_AS_ACTION_NEVER:不将该MenuItem显示在ActionBar上
        >SHOW_AS_ACTION_WITH_TEXT:将该MenuItem显示在ActionBar上。并显示菜单项的文本
    然后,在实际项目中我们推荐使用XML资源文件来定义菜单。由于,我们能够直接在菜单资源文件里的<item.../>元素指定例如以下属性就可以:
        <item android:title="菜单项名称"
                  android:icon="菜单项标题"
                  android:showAsAction="always|withText"    
                //总是将菜单项显示在ActionBar上并显示菜单项的文本
                  ......./>
    源代码举例
    (1)菜单资源文件/res/menu/menu.xml
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
    3.  <!-- 第一个菜单项:字体大小菜单,并设置为ActionBar(假如手机无Menu键)-->  
    4.     <item android:title="@string/font_size"  
    5.           android:icon="@drawable/font"  
    6.           android:showAsAction="always|withText">  
    7.           <menu>  
    8.               <!-- 定义一组单选菜单项 ,然后定义一组菜单选项-->  
    9.               <group android:checkableBehavior="single">  
    10.                   <item  
    11.                       android:id="@+id/font_10"  
    12.                       android:title="@string/font_10"/>  
    13.                   <item  
    14.                       android:id="@+id/font_12"  
    15.                       android:title="@string/font_12"/>  
    16.                   <item  
    17.                       android:id="@+id/font_14"  
    18.                       android:title="@string/font_14"/>  
    19.                   <item  
    20.                       android:id="@+id/font_16"  
    21.                       android:title="@string/font_16"/>  
    22.                   <item  
    23.                       android:id="@+id/font_18"  
    24.                       android:title="@string/font_18"/>  
    25.               </group>  
    26.           </menu>  
    27.      </item>  
    28.            
    29.  <!-- 第二个菜单项:普通菜单-->  
    30.   <item  
    31.       android:id="@+id/plain_item"  
    32.       android:title="@string/palin_item"  
    33.       android:showAsAction="always|withText">  
    34.   </item>  
    35.    
    36.  <!-- 第三个菜单项:字体颜色-->  
    37.  <item  
    38.      android:title="@string/font_color"  
    39.      android:icon="@drawable/color"  
    40.      android:showAsAction="always|withText">  
    41.        <!-- 定义一组单选菜单项 ,然后定义一组菜单选项-->  
    42.        <menu>  
    43.   <group>  
    44.       <item  
    45.           android:id="@+id/red_font"  
    46.           android:title="@string/red_title"/>  
    47.       <item  
    48.           android:id="@+id/blue_font"  
    49.           android:title="@string/blue_title"/>  
    50.       <item  
    51.           android:id="@+id/green_font"  
    52.           android:title="@string/blue_title"/>  
    53.   </group>  
    54.    </menu>  
    55.  </item>  
    56. </menu>   
    凝视:android:showAsAction属性,用于指定了菜单项在ActionBar上显示的形式或位置,主要有下面几种值可选:
        >always:表示永远显示在ActionBar中。假设屏幕空间不够则无法显示;
        >ifRoom:表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在折叠图标中
        >never:表示永远显示在折叠图标中。用户单击该折叠图标将显示全部选项菜单项
        >withText:表示显示菜单项的名称
    (2)src/MainActivity.java
    1. package com.android.android_actionbar_2;  
    2. import android.app.ActionBar;  
    3. import android.app.Activity;  
    4. import android.content.Intent;  
    5. import android.graphics.Color;  
    6. import android.os.Bundle;  
    7. import android.view.Menu;  
    8. import android.view.MenuInflater;  
    9. import android.view.MenuItem;  
    10. import android.widget.TextView;  
    11. import android.widget.Toast;  
    12. public class MainActivity extends Activity {  
    13.   
    14.  ActionBar actionbar;  
    15.  private TextView txt;  
    16.  @Override  
    17.  protected void onCreate(Bundle savedInstanceState) {  
    18.   super.onCreate(savedInstanceState);  
    19.   setContentView(R.layout.main);     
    20. /1./获取当前Activity的actionBar
    21.   actionbar=getActionBar();    
    22.  }  
    23.    
    24.  //2.将Xml资源加入到menu菜单中  
    25.  public boolean onCreateOptionsMenu(Menu menu)  
    26.  {  
    27.   MenuInflater inflator=new MenuInflater(this);  
    28.   inflator.inflate(R.menu.menu, menu);  
    29.   return super.onCreateOptionsMenu(menu);  
    30.  }  
    31.    
    32.  //3.响应并实现菜单项功能  
    33.  public boolean onOptionsItemSelected(MenuItem mi)  
    34.  {  
    35.   if(mi.isCheckable())  
    36.   {  
    37.    mi.setChecked(true);  
    38.   }  
    39.   switch(mi.getItemId())  
    40.   {  
    41.    //设置字体大小  
    42.    case R.id.font_10:  
    43.     txt.setTextSize(10*2);  
    44.     break;  
    45.    case R.id.font_12:  
    46.     txt.setTextSize(12*2);  
    47.     break;  
    48.    case R.id.font_14:  
    49.     txt.setTextSize(14*2);  
    50.     break;  
    51.    //设置字体颜色  
    52.    case R.id.blue_font:  
    53.     txt.setTextColor(Color.BLUE);  
    54.     mi.setChecked(true);  
    55.     break;  
    56.    case R.id.green_font:  
    57.     txt.setTextColor(Color.GREEN);  
    58.     mi.setChecked(true);  
    59.     break;  
    60.    //设置普通菜单响应  
    61.    case R.id.plain_item:  
    62.     Toast toast=Toast.makeText(MainActivity.this, "您单击了普通菜单", Toast.LENGTH_SHORT);  
    63.     toast.show();  
    64.     break;  
    65.   }  
    66.   return true;      
    67.  }  
    68.  
    (3)效果演示

    3.启用程序图标导航
       为了实现将应用程序图标转变成能够点击的图标。能够调用ActionBar的下面方法:
        >setDisplayHomeAsUpEnabled(boolean showHomeAsUp):设置是否将应用程序图标转变成可点击的图标,并在图标上加入一个向左的箭头;
        >setDisplayOptions(int options):通过传入int类型变量来控制该ActionBar的显示选项;
        >setDisplayShowHomeEnabled(boolean showHome):设置是否显示应用程序的图标;
        >setHomeButtonEnabled(boolean enabled):设置是否将应用程序图标转换变成可点击的button;
    源代码实战
    功能:将该Activity的程序图标转变成可点击的图标。并控制用于单击该图标时返回程序的主Activity.
    package com.example.actionbar;
    import android.app.ActionBar;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    /**
     *	项目名称/版本:Actionbar/v1.0
     *	包   名:com.example.actionbar
     *	类描写叙述:启用程序图标导航.点击应用程序图标。返回主界面
     *	创建人:jiangdongguo
     *	创建时间:2015-6-12 下午8:20:14
     * 博客地址:http://blog.csdn.net/u012637501
     */
    public class ActionHome extends Activity {
     private ActionBar actionBar;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      //a.获得ActionBar实例
      actionBar = getActionBar();
      //b.设置是否显示应用程序图标
      actionBar.setDisplayShowHomeEnabled(true);
      //c.设置是否将应用程序图标转换变成可点击的button
      actionBar.setHomeButtonEnabled(true);
      //d.将应用程序图标设置为可点击的button并在图标上加入向左箭头
     }
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
      // TODO Auto-generated method stub
      return super.onCreateOptionsMenu(menu);
     }
     /**
      *选项菜单的菜单项被单击后的回调方法
      * */
     public boolean onOptionsItemSelected(MenuItem item) {
      //推断菜单项能否被点击,是则使能菜单项
      if(item.isChecked()){
       item.setChecked(true);
      }
      //推断单击的是哪个菜单项,并作出对应的响应
      switch (item.getItemId()) {
      case android.R.id.home:
       Intent intent = new Intent(ActionHome.this,MainActivity.class);
       startActivity(intent);
       this.finish();
       break;
      default:
       break;
      }
      return true;
     }
    }
    效果演示:

    4.使用View作为Action View
      ActionBar上除了能够显示普通的Action Item之外,还能够显示普通的UI组件(widget)作为一个功能button的替代。操作视图提供了高速訪问行为而不改变活动或片段,且没有替换动作栏。比如,假设你想实现搜索动作,能够在action bar中嵌入一个SearchView窗体部件。为了实现一个action view到动作栏中。我们能够使用actionLayout or actionViewClass属性来指定一个布局(xml)资源或者窗体部件widget到Action Bar.详细操作:
    >定义Action Item时,使用android:actionViewClass属性指定Action View的实现类(widget);
    >定义Action Item时,使用android:actionLayout属性指定Action View相应的视图(layout)。
    (1)菜单资源res/menu/menu.xml
        在菜单资源中定义Action Item,但这Action Item使用的是Action View而不是不同的Action Item。
    1. <?xml version="1.0" encoding="utf-8"?>   
    2. <menu xmlns:android="http://schemas.android.com/apk/res/android">   
    3. <!-- Action Item为widget-->   
    4. <item  
    5. android:id="@+id/search"  
    6. android:title="搜索"  
    7. android:orderInCategory="100"  
    8. android:showAsAction="ifRoom|collapseActionView"  
    9. android:actionViewClass="android.widget.SearchView"/>  
    10.   
    11. <!-- Action Item为视图资源-->  
    12. <item  
    13. android:id="@+id/clock"  
    14. android:title="模拟时钟"  
    15. android:orderInCategory="100"  
    16. android:showAsAction="ifRoom|collapseActionView"  
    17. android:actionLayout="@layout/clock"/>  
    18. </menu> 
    当中。clock视图实现代码例如以下/res/layout/clock.xml:
    <?

    xml version="1.0" encoding="utf-8"?>  

    <AnalogClock  
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"   />
    (2)为Action View加入事件监听器
        Action视图的事件监听主要在onCreateOptionsMenu()方法中实现。通过调用MenuItemCompat.getActionView并传递对应的菜单项(MenuItem)来获取Action视图对象。

    1. public boolean onCreateOptionsMenu(Menu menu) {  
    2.     getMenuInflater().inflate(R.menu.menu, menu);          //载入菜单资源
    3.     MenuItem searchItem = menu.findItem(R.id.search);  //获得MenuItem对象
    4.     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);  //获得Action视图对象
    5.     // Configure the search info and add any event listeners  //为Action视图对象注冊事件监听器
    6.     ...  
    7.     return super.onCreateOptionsMenu(menu);  
    8. }  
    (3)效果例如以下
      
    注:android:showAsAction="collapseActionView"  属性值表示该空间能够被合并成一个Actionbutton。

  • 相关阅读:
    JavaScript学习(五)
    浏览器输入地址到返回页面
    session cookie
    springboot 运行jar包
    mysql:The user specified as a definer ('root'@'%') does not exist
    easyUI
    json
    json fastjson
    springboot:because it is a JDK dynamic proxy that implements:
    git 提示错误:(non-fast-forward)
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7203997.html
Copyright © 2011-2022 走看看