ActionBar在Android 3.0 SDK中为平板引入,在4.0中也可以在phone中使用。在title中提供类似tab和菜单的效果,有三种形式:Tabbed action bar,list action bar和standard action bar,我们将在小例子中进行示范。
Home Icon

在Action Bar的最左边,就是Home icon和标题的区域,如上图红圈内。在Home icon的左边有一个返回的的左箭头,通常我们点击这个区域,将回到应用的主activity中。图中的activity是通过主activity的菜单触发,之前已经多次使用,不在重复。activity的layout很简单,只有一个textview在LinearLayout中,其代码如下:
源代码
 public class HomePressTestCase1 extends Activity{ 
     private TextView tv = null; 
     private ActionBar  bar = null; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) {  
         super.onCreate(savedInstanceState); 
         
         setContentView(R.layout.basic_test); 
         tv = (TextView)findViewById(R.id.textViewId); 
         tv.setMovementMethod(ScrollingMovementMethod.getInstance());//设置TextView内容过多时,可以通过鼠标进行滚动
         tv.setText(""); 
         //在android 4.0后,缺省是不监听Home icon动作,要有效使用,必须进行下面的设置
         bar = getActionBar();  //获取ActionBar的对象,从这个方法也可知action bar是activity的一个属性
         bar.setDisplayHomeAsUpEnabled(true);   //显示返回的箭头,并可通过onOptionsItemSelected()进行监听,其资源ID为android.R.id.home。 
         // bar.setHomeButtonEnabled(true); //不显示箭头符号,允许通过onOptionsItemSelected()进行箭头,但一般的情况下,还是应该给个箭头提示给用户。 
     } 
 
     @Override 
     public boolean onOptionsItemSelected(MenuItem item) {  
         switch(item.getItemId()){ 
         case android.R.id.home: //对用户按home icon的处理,本例只需关闭activity,就可返回上一activity,即主activity。
             showInfo("Home is press"); 
             finish(); 
             return true; 
         default: 
             break; 
         } 
         return super.onOptionsItemSelected(item); 
     } 
 
     protected void showInfo(String s){ 
         tv.setText(s + "\n" + tv.getText()); 
         Log.d(getLocalClassName(),s); 
     } 
 }
TextView的滚动
我们可以将整个layout设置为ScrollView,但是TextView本身可以设置滚动,在xml中相关的属性如下。并在代码中通过setMovementMethod(ScrollingMovementMethod.getInstance() )使之有效。
<TextView android:id="@+id/textViewId"  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:scrollbars="vertical"
    android:scrollbarStyle="insideOverlay"
    android:scrollbarSize="25dip"
    android:scrollbarFadeDuration="0"
    />返回主activity或指定activity
如果上一activity并非主activity,而我们有希望直接返回主activity,可以如下处理:
 public boolean onOptionsItemSelected(MenuItem item) {  
     switch(item.getItemId()){ 
     case android.R.id.home: 
         showInfo("Home is pressed"); 
         Intent i = new Intent(this,MainActivity.class); 
         //【对于FLAG_ACTIVITY_CLEAR_TOP】:假设目前activity的task堆栈是 MainActivity –> A –> B –> 当前Activity(如果我们按返回键,则依次返回B,A,最后为MainActivity。现在intent要唤起MainActivity,发现在堆栈存在,则将其及之前的全部清楚,在唤起新的activity后,task堆栈为MainActivity。注意,通过跟踪activity的对象,将产生一个新的MainActivity的实例,不是原来的,原来的已经被干掉。又例如当前为C—> M—>A—>B—>当前,如果打开M,则执行后,推展为C—>M。 
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(i); 
         return true; 
     default: 
         break; 
     } 
     return super.onOptionsItemSelected(item); 
 } 
 
在Android 4.1之后(API Level 16),有更方便的处理方式,在AndroidManifest.xml中设置返回的activity即可,xml的片段如下:
  <activity android:name=".HomePressTestCase1" android:label="@string/test_case_1_home"
             android:parentActivityName="cn.wei.flowingflying.pro.MainActivity" />
 
我们只需设置parentActivityName,用户按Home icon区域,不需要人工代码进行处理,就可以实现上面通过设置flag的intent代码的实现。java代码可进一步简化:
   public boolean onOptionsItemSelected(MenuItem item) {
         if(item.getItemId() == android.R.id.home){
             showInfo("Home is press");
         }    
         return super.onOptionsItemSelected(item);
     }
 
本博文涉及的例子代码,可以在Pro Android学习:ActionBar小例子中下载。
 
相关链接: 我的Android开发相关文章
 Android应用中利用ActionBar实现返回主活动的高效方法
Android应用中利用ActionBar实现返回主活动的高效方法
         
                   
                   
                   
                   
                            
 
                             本文详细介绍了如何在Android应用中利用ActionBar实现返回主活动的高效方法,包括设置HomeIcon的动作监听、处理返回操作的代码实现以及在Android 4.1之后的简化处理方式。并通过实例代码展示,帮助开发者更好地理解和应用这些技巧。
本文详细介绍了如何在Android应用中利用ActionBar实现返回主活动的高效方法,包括设置HomeIcon的动作监听、处理返回操作的代码实现以及在Android 4.1之后的简化处理方式。并通过实例代码展示,帮助开发者更好地理解和应用这些技巧。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1万+
					1万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            