Android ActionBar使用笔记
来源:互联网 发布:中山大学网络教育官网 编辑:程序博客网 时间:2024/06/06 00:37
将actionbar常用方法整理,以便以后使用.
一. 实现action bar:
1.修改styles.xml 文件
<resources> <style name="AppTheme" parent="@android:style/Theme.Holo.Light"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style></resources>
注意: 将AppTeme的父类改成@android:style/Theme.Holo.Light 因为主题应该是Theme.Holo 或 Theme.Holo的子类才能显示actionbar
2.创建action bar的布局文件
在menu下创建activity_actions.xml文件, 例如:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:icon="@mipmap/ic_action_search" android:title="搜索" android:showAsAction="always" /> <item android:id="@+id/action_settings" android:title="设置" android:showAsAction="ifRoom"/></menu>
shouAsAction属性可以是以下值:
(1) alaways: 这个值会使菜单项一直显示在ActionBar上
(2) ifRoom: 如果有足够的空间,这个值会使菜单显示在ActionBar上
(3) never: 这个值菜单永远不会出现在ActionBar
(4) withText: 这个值使菜单和它的图标, 菜单文本一起显示。
3.在使用的activty中添加代码:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); //将菜单布局引入 inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: //TODO:进行对应逻辑处理 return true; case R.id.action_settings: //TODO:进行对应逻辑处理 return true; default: return super.onOptionsItemSelected(item); } }
效果:
二. 添加 Up Button
1.首先在onCreate中添加下面代码:
setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);
2.需要在AndroidManifest.xml中配置父Activity
<activity android:name=".XXXActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.XXXX.XXXX.MainActivity" /> </activity>
在4.1后可以写成:
<activity android:name=".TabActivity" android:parentActivityName=".MainActivity" > </activity>
3.对android.R.id.home这个事件ID进行一些处理
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent upIntent = NavUtils.getParentActivityIntent(this); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { TaskStackBuilder.create(this) .addNextIntentWithParentStack(upIntent) .startActivities(); } else { upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, upIntent); } return true; ...... } }
三. 实现有搜索框的功能
1.修改menu目录下的activity_action.xml中的sreach, 添加actionViewClass属性:
<item android:id="@+id/action_search" android:icon="@mipmap/ic_action_search" android:actionViewClass="android.widget.SearchView" android:title="搜索" android:showAsAction="always" />
2.对SearchView进行属性配置
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); // 配置SearchView的属性 //...... return super.onCreateOptionsMenu(menu); }
四. overflow按钮不显示问题
如果手机有menu物理按键的话, 我们在menu中的xml里配置的属性showAsAction为never的item, 将不会显示.
如何处理? 通过反射获得sHasPermanentMenuKey方法, 让它永远返回false
@Override protected void onCreate(Bundle savedInstanceState) { ...... setOverflowShowingAlways(); } private void setOverflowShowingAlways() { try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); //设置为false } catch (Exception e) { e.printStackTrace(); } }
五. 让Overflow按钮中的选项显示图标
overflow中的Action按钮应不应该显示图标,是由MenuBuilder这个类的setOptionalIconsVisible方法来决定的. 传入true显示图标.
@Override public boolean onMenuOpened(int featureId, Menu menu) { if (featureId == Window.FEATURE_ACTION_BAR && menu != null) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { } } } return super.onMenuOpened(featureId, menu); }
- Android ActionBar使用笔记
- 学习笔记 android actionbar
- Android笔记 标题栏ActionBar
- Android ActionBar学习笔记
- Android ActionBar学习笔记
- Android笔记 actionbar学习
- Android ActionBar使用介绍
- [Android] ActionBar的使用
- android ActionBar的使用
- android ActionBar的使用
- Android ActionBar 的使用
- android的ActionBar使用
- android ActionBar的使用
- Android ActionBar的使用
- Android actionbar 使用简介
- Android ActionBar的使用
- Android ActionBar 基本使用
- Android ActionBar使用
- Maven学习总结(22)——Maven常用插件介绍
- ubuntu14.04 搭建ftp
- 通过CoordinatorLayout制作高级滚动特效
- 后台运用html格式导出Excel文件
- Android Launcher T9搜索APP实现
- Android ActionBar使用笔记
- 自动循环滚动textview
- 内存溢出问题解决方案与Visualvm监听添加
- USB的VID和PID
- Java获取当前系统时间System.currentTimeMillis()
- java excel通过浏览器下载
- Using Flashback in a Data Guard Environment
- spring+cxf
- 46. Permutations