You can easily add awesome animated context menu to your app.
Check this project on dribbble
Check this project on Behance
Usage:
对于一个工作实现,看看这个应用程序模块
1. 克隆存储库和添加到您的项目来源或使用它:
compile 'com.yalantis:contextmenu:1.0.4'
2. 创建MenuObject列表,包括图标或图标和描述。
你可以用任何的
resource, bitmap, drawable, color
as image:
item.setResource(...)
item.setBitmap(...)
item.setDrawable(...)
item.setColor(...)
你可以设置图片ScaleType:
item.setScaleType(ScaleType.FIT_XY)
You can use any resource, drawable, color
as background:
item.setBgResource(...)
item.setBgDrawable(...)
item.setBgColor(...)
现在你可以轻松添加文本外观风格菜单标题:
In your project styles create style for text appearance
(For better visual effect extend it from TextView.DefaultStyle):
<style name="TextViewStyle" parent="TextView.DefaultStyle">
<item name="android:textStyle">italic|bold</item>
<item name="android:textColor">#26D0EB</item>
</style>
And set it's id to your MenuObject :
MenuObject addFr = new MenuObject("Add to friends");
BitmapDrawable bd = new BitmapDrawable(getResources(),
BitmapFactory.decodeResource(getResources(), R.drawable.icn_3));
addFr.setDrawable(bd);
addFr.setMenuTextAppearanceStyle(R.style.TextViewStyle);
You can set any color
as divider color:
你可以设置任何颜色分频器的颜色:
item.setDividerColor(...)
示例:
MenuObject close = new MenuObject();
close.setResource(R.drawable.icn_close);
MenuObject send = new MenuObject("Send message");
send.setResource(R.drawable.icn_1);
List<MenuObject> menuObjects = new ArrayList<>();
menuObjects.add(close);
menuObjects.add(send);
3. Create newInstance
of ContextMenuDialogFragment
, which receivedMenuParams
object.
MenuParams menuParams = new MenuParams();
menuParams.setActionBarSize((int) getResources().getDimension(R.dimen.tool_bar_height));
menuParams.setMenuObjects(getMenuObjects());
menuParams.setClosableOutside(true);
// set other settings to meet your needs
mMenuDialogFragment = ContextMenuDialogFragment.newInstance(menuParams);
4. Set menu with button, which will open ContextMenuDialogFragment
.
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.context_menu:
mMenuDialogFragment.show(fragmentManager, "ContextMenuDialogFragment");
break;
}
return super.onOptionsItemSelected(item);
}
5. Implement OnMenuItemClickListener
interface with onMenuItemClick
method.
public class MainActivity extends ActionBarActivity implements OnMenuItemClickListener
…
@Override
public void onMenuItemClick(View clickedView, int position) {
//Do something here
}
Customization:
For better experience menu item size should be equal to ActionBar
height.
newInstance
of ContextMenuDialogFragment
receives MenuParams
object that has the fields:
mMenuObjects
- list of MenuObject objects,
mAnimationDelay
- delay in millis after fragment opening and before closing, which will make animation smoother on slow devices,
nAnimationDuration
- duration of every piece of animation in millis,
isClosableOutside
- if menu can be closed on touch to non-button area,
isFitSystemWindows
- if true, then the default implementation of fitSystemWindows(Rect) will be executed,
isClipToPadding
- true to clip children to the padding of the group, false otherwise.
The last two parameters may be useful if you use Translucent parameters in your theme:
<item name="android:windowTranslucentStatus">true</item>
To stay Context Menu
below Status Bar set fitSystemWindows
to true and clipToPadding
to false.
Compatibility
- Android Honeycomb 3.0+
Changelog
Version: 1.0.4
- Old
ContextMenuDialogFragment
newInstance
methods are deprecated. Use new universal one that receivedMenuParams
. - Added possibility to dismiss menu by clicking on non-button area. See
MenuParams.setClosableOutside(boolean)
.
Version: 1.0.3
- Added menu text appearence style. (Note: other text style methods are deprecated).
Version: 1.0.2
- Changed
MenuObject
constructors. Image setting is moved to methods - Added styling of
MenuObject
image, background, text color, divider color - Added possibility to interact with translucent Status Bar
Version: 1.0.1
- Added
OnMenuItemLongClickListener
(usage: the same asOnMenuItemClickListener
, check sample app) - Renamed:
com.yalantis.contextmenu.lib.ContextMenuDialogFragment.ItemClickListener ->
com.yalantis.contextmenu.lib.interfaces.OnMenuItemClickListener
com.yalantis.contextmenu.lib.ContextMenuDialogFragment.ItemClickListener.onItemClick(...) ->
com.yalantis.contextmenu.lib.interfaces.OnMenuItemClickListener.onMenuItemClick(...)
Version: 1.0
- Pilot version