android ActionBar的使用(模仿微信界面)
来源:互联网 发布:桌面时钟显示软件 编辑:程序博客网 时间:2024/05/16 08:14
- 修改menu 文件下的main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.ll.testactionbar.MainActivity" > <item android:id="@+id/action_search" android:actionViewClass="android.widget.SearchView" android:icon="@drawable/actionbar_search_icon" android:title="@string/action_search" android:showAsAction="ifRoom|collapseActionView" /> 1).id:唯一标示 2).icon:图标(要显示的图片) 3).title:文字 4).showAsAction: showAsAction属性共有五个值:ifRoom、never、always、withText、collapseActionView,可以混合使用. ifRoom:如果溢出则会显示在item中。 never:永远不会显示,只会在溢出列表中显示,而且只显示标题 always:永远都会显示 withText:显示文本标题。Action bar会尽可能的显示这个标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可能显示不全。 collapseActionView:声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。一般要配合ifRoom一起使用才会有效果。 <item android:id="@+id/action_album" android:icon="@drawable/ofm_photo_icon" android:title="@string/action_album"/> <item android:id="@+id/action_collection" android:icon="@drawable/ofm_collect_icon" android:title="@string/action_collection"/> <item android:id="@+id/action_card" android:icon="@drawable/ofm_card_icon" android:title="@string/action_card"/> <item android:id="@+id/action_settings" android:icon="@drawable/ofm_setting_icon" android:title="@string/action_settings"/> <item android:id="@+id/action_feed" android:icon="@drawable/ofm_feedback_icon" android:title="@string/action_feed"/> </menu>
2.修改MainActivity中的代码
private void setOverflowShowingAlways(){ try { ViewConfiguration config = ViewConfiguration.get(this); Field field = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); field.setAccessible(true); field.setBoolean(config, false); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } setOverflowShowingAlways方法使用反射屏蔽掉物理Menu键,不然在有物理Menu键的手机上,overflow按钮会显示不出来。 在OnCreate方法中调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setOverflowShowingAlways(); getActionBar().setDisplayHomeAsUpEnabled(false);//不显示actionBar的返回图标 }重写onMenuOpened方法(使用反射让隐藏在overflow当中的Action按钮的图标显示出来) @Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId==Window.FEATURE_ACTION_BAR && menu!=null){ if(menu.getClass().getSimpleName().equals("MenuBuilder")){ try { Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); method.setAccessible(true); method.invoke(menu, true); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return super.onMenuOpened(featureId, menu); }
3.自定义actionBar的样式,修改values-v14文件下style.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/WeChatActionBar</item> <item name="android:itemBackground">@drawable/actionbar_bg_selector</item> <item name="android:actionBarItemBackground">@drawable/actionbar_bg_selector</item> <item name="android:itemTextAppearance">@style/WeChatActionBarOverflow</item> <item name="android:actionOverflowButtonStyle">@style/WeChatActionButtonOverflow</item> </style> <style name="WeChatActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:background">#303537</item> <item name="android:titleTextStyle">@style/WeChatActionBarTitleText</item> </style> <style name="WeChatActionBarTitleText" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> <item name="android:textColor">#cfcfcf</item> <item name="android:textSize">17sp</item> </style> <style name="WeChatActionBarOverflow" parent="@android:style/Widget.ActionButton.Overflow"> <item name="android:textSize">16sp</item> </style> <style name="WeChatActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow"> <item name="android:src">@drawable/actionbar_add_icon</item> </style></resources>
4.如果子菜单中再添加子菜单使用自定义ActionProvider
package com.example.wechatsample;import android.content.Context;import android.view.ActionProvider;import android.view.MenuItem;import android.view.MenuItem.OnMenuItemClickListener;import android.view.SubMenu;import android.view.View;public class PlusActionProvider extends ActionProvider { private Context context; public PlusActionProvider(Context context) { super(context); this.context = context; } @Override public View onCreateActionView() { return null; } @Override public void onPrepareSubMenu(SubMenu subMenu) { subMenu.clear(); subMenu.add(context.getString(R.string.plus_group_chat)) .setIcon(R.drawable.ofm_group_chat_icon) .setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return true; } }); subMenu.add(context.getString(R.string.plus_add_friend)) .setIcon(R.drawable.ofm_add_icon) .setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return false; } }); subMenu.add(context.getString(R.string.plus_video_chat)) .setIcon(R.drawable.ofm_video_icon) .setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return false; } }); subMenu.add(context.getString(R.string.plus_scan)) .setIcon(R.drawable.ofm_qrcode_icon) .setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return false; } }); subMenu.add(context.getString(R.string.plus_take_photo)) .setIcon(R.drawable.ofm_camera_icon) .setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return false; } }); } @Override public boolean hasSubMenu() { return true; }} <item android:id="@+id/action_plus" android:icon="@drawable/actionbar_add_icon" android:showAsAction="ifRoom|collapseActionView" android:actionProviderClass="com.ll.testactionbar.PlusActionProvider" android:title="@string/action_plus"/>
0 0
- android ActionBar的使用(模仿微信界面)
- Android学习之微信界面的模仿实现
- [模仿Android微信]之主界面
- 使用ViewPage+Fragment模仿微信界面
- 03.实例篇:微信主页面模仿——ActionBar和ViewPager的使用(下篇)
- Android 使用动画translate模仿扣扣,微信界面的左滑和右滑切换界面
- 模仿微信界面
- 模仿微信的界面实现
- 模仿微信6.0的界面效果
- 02.实例篇:微信主页面模仿——ActionBar的应用(上篇)
- Android 弹无虚发之第二弹:Android ActionBar 的其它用法(搜索、分享、隐藏复杂布局,模仿Google Play,微信)
- Android 弹无虚发之第二弹:Android ActionBar 的其它用法(搜索、分享、隐藏复杂布局,模仿Google Play,微信)
- Android_ViewPage_Fragment_模仿微信界面
- Android之简单模仿微信聊天界面
- 模仿微信界面之聊天界面
- Android UI设计初体验(模仿微信登录界面)
- 模仿微信的"我"界面的demo
- ios模仿微信的"我"界面的demo
- 文章标题
- SQL Server添加和删除字段的问题
- spring mvc中string不能转为date型解决
- log4j 配置
- iOS开发拓展篇—CoreLocation定位服务
- android ActionBar的使用(模仿微信界面)
- 九度OJ 1083:特殊乘法 (基础题)
- iOS开发拓展篇—CoreLocation地理编码
- JavaScript的对象知识
- 多线程锁
- JSONObject转换JSON--将Date转换为指定格式
- 买房过户经验(转)
- SQL Server中使用一条SQL插入多条数据
- iOS侧滑菜单实现