[Android] ActionBar 显示overflow (就是后边三个点儿的按钮)

显示3个点的更多action button

从上面的代码我们知道,即使我们横屏也显示不出全部action button。我们可以加入3个点的action button来用下拉显示的方式,显示跟多的action button。在网上的信息得知,只要你的手机有menu键actionbar就不会显示3个点的更多或者说3个点的menu按钮。

 

  1. private void getOverflowMenu() {  
  2.    
  3.      try {  
  4.         ViewConfiguration config = ViewConfiguration.get(this);  
  5.         Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");  
  6.         if(menuKeyField != null) {  
  7.             menuKeyField.setAccessible(true);  
  8.             menuKeyField.setBoolean(config, false);  
  9.         }  
  10.     } catch (Exception e) {  
  11.         e.printStackTrace();  
  12.     }  
  13. }  


onCreat()方法中调用这个方法可以显示3个点的menu按钮。下图是按下3个点的action button的效果

技术分享

  • 对于很多PAD来说:ActionBar中空间足够显示的话,那么对应的menu菜单,只有不设置为ifRoom,然后才可以被放到overflow中:
  • 对于很多手机来说:ActionBar中没有足够的控件显示所有的菜单的话,即使是设置了ifRoom,很多菜单本来也也还是无法全部显示,所以:即使设置了ifRoom的menu的item,以及没有设置ifRoom的menu的item,都会被放到overflow中的
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.     <item  
  3.         android:id="@+id/menu_settings"  
  4.         android:orderInCategory="100"  
  5.         android:showAsAction="never"  
  6.         android:title="settings"/>  
  7.     <item  
  8.         android:id="@+id/action_refresh"  
  9.         android:icon="@drawable/navigation_refresh"  
  10.         android:orderInCategory="101"  
  11.         android:showAsAction="ifRoom|withText"  
  12.         android:title="refresh"/>  
  13.     <item  
  14.         android:id="@+id/action_about"  
  15.         android:icon="@drawable/action_about"  
  16.         android:orderInCategory="101"  
  17.         android:showAsAction="ifRoom"  
  18.         android:title="about"/>  
  19.     <item  
  20.         android:id="@+id/action_search"  
  21.         android:icon="@drawable/action_search"  
  22.         android:orderInCategory="103"  
  23.         android:showAsAction="ifRoom"/>  
  24.     <item  
  25.         android:id="@+id/action_edit"  
  26.         android:icon="@android:drawable/ic_menu_edit"  
  27.         android:orderInCategory="105"  
  28.         android:showAsAction="ifRoom"  
  29.         android:title="edit"/>  
  30.     <item  
  31.         android:id="@+id/action_help"  
  32.         android:showAsAction="always"  
  33.         android:title="help"/>  
  34.     <item  
  35.         android:id="@+id/action_email"  
  36.         android:icon="@android:drawable/ic_dialog_email"  
  37.         android:orderInCategory="106"  
  38.         android:showAsAction="ifRoom"  
  39.         android:title="email"/>  
  40. </menu
  1. package com.example.demo_actionbarbasic;  
  2. import com.example.demo_actionbarbasic.R;  
  3. import android.app.ActionBar;  
  4. import android.app.Activity;  
  5. import android.content.Intent;  
  6. import android.os.Bundle;  
  7. import android.view.Menu;  
  8. import android.view.MenuItem;  
  9. import android.widget.Toast;  
  10.   
  11. public class MainActivity extends Activity {  
  12.     private MenuItem menuItem = null;  
  13.       
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.activity_main);  
  18.         // 通过hilde()和show()方法可以控制actionbar的隐藏和显示  
  19.         // ActionBar actionBar = getActionBar();  
  20.         // actionBar.hide();  
  21.         // actionBar.show();  
  22.     }  
  23.   
  24.     // 我们可以看到,actonbar的用法跟选项菜单是一样的  
  25.     @Override  
  26.     public boolean onCreateOptionsMenu(Menu menu) {  
  27.         // Inflate the menu; this adds items to the action bar if it is present.  
  28.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  29.         return true;  
  30.     }  
  31.   
  32.     @Override  
  33.     public boolean onOptionsItemSelected(MenuItem item) {  
  34.         switch (item.getItemId()) {  
  35.         case R.id.action_refresh:  
  36.             Toast.makeText(this, "Menu Item refresh selected",  
  37.                     Toast.LENGTH_SHORT).show();  
  38.             break;  
  39.         case R.id.action_about:  
  40.             Toast.makeText(this, "Menu Item about selected", Toast.LENGTH_SHORT)  
  41.                     .show();  
  42.             break;  
  43.         case R.id.action_edit:  
  44.             Toast.makeText(this, "Menu Item edit selected", Toast.LENGTH_SHORT)  
  45.                     .show();  
  46.             break;  
  47.         case R.id.action_search:  
  48.             Toast.makeText(this, "Menu Item search selected",  
  49.                     Toast.LENGTH_SHORT).show();  
  50.             break;  
  51.         case R.id.action_help:  
  52.             Toast.makeText(this, "Menu Item  settings selected",  
  53.                     Toast.LENGTH_SHORT).show();  
  54.             break;  
  55.         default:  
  56.             break;  
  57.         }  
  58.         return super.onOptionsItemSelected(item);  
  59.     }  

转载自:http://www.cnblogs.com/SharkBin/p/3559213.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。