在 dribbble 上检查这个项目
在 Behance 上查看该项目
对于有效的实现,请查看app
模块
将其添加到存储库末尾的根 build.gradle 中:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
添加依赖
dependencies {
implementation 'com.github.Yalantis:Context-Menu.Android:1.1.4'
}
MenuObject
列表,列表由图标或图标和描述组成。您可以使用任何drawable, resource, bitmap, color
作为图像:
menuObject.drawable = ...
menuObject.setResourceValue(...)
menuObject.setBitmapValue(...)
menuObject.setColorValue(...)
您可以设置图像ScaleType
:
menuObject.scaleType = ScaleType.FIT_XY
您可以使用任何resource, drawable, color
作为背景:
menuObject.setBgResourceValue(...)
menuObject.setBgDrawable(...)
menuObject.setBgColorValue(...)
现在您可以轻松地为菜单标题添加文本外观样式:
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 :
val bitmapDrawable = BitmapDrawable(
resources,
BitmapFactory.decodeResource(resources, R.drawable.icn_3)
)
val menuObject = MenuObject("Add to friends").apply {
drawable = bitmapDrawable
menuTextAppearanceStyle = R.style.TextViewStyle
}
您可以使用任何color
作为文本颜色:
menuObject.textColor = ...
您可以将任何color
设置为分隔线颜色:
menuObject.dividerColor = ...
例子:
val close = MenuObject().apply { setResourceValue(R.drawable.icn_close) }
val send = MenuObject("Send message").apply { setResourceValue(R.drawable.icn_1) }
val addFriend = MenuObject("Add to friends").apply {
drawable = BitmapDrawable(
resources,
BitmapFactory.decodeResource(resources, R.drawable.icn_3)
)
}
val menuObjects = mutableListOf<MenuObject>().apply {
add(close)
add(send)
add(addFriend)
}
ContextMenuDialogFragment
的newInstance
,它接收MenuParams
对象。 val menuParams = MenuParams(
actionBarSize = resources.getDimension(R.dimen.tool_bar_height).toInt(),
menuObjects = getMenuObjects(),
isClosableOutside = false
// set other settings to meet your needs
)
// If you want to change the side you need to add 'gravity' parameter,
// by default it is MenuGravity.END.
// For example:
val menuParams = MenuParams(
actionBarSize = resources.getDimension(R.dimen.tool_bar_height).toInt(),
menuObjects = getMenuObjects(),
isClosableOutside = false,
gravity = MenuGravity.START
)
val contextMenuDialogFragment = ContextMenuDialogFragment.newInstance(menuParams)
ContextMenuDialogFragment
。 override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
item?.let {
when (it.itemId) {
R.id.context_menu -> {
showContextMenuDialogFragment()
}
}
}
return super.onOptionsItemSelected(item)
}
contextMenuDialogFragment = menuItemClickListener = { view, position ->
// do something here
}
contextMenuDialogFragment = menuItemLongClickListener = { view, position ->
// do something here
}
为了获得更好的体验,菜单项的大小应等于ActionBar
高度。
ContextMenuDialogFragment
的newInstance
接收具有以下字段的MenuParams
对象:
menuObjects
- MenuObject 对象列表,
animationDelay
- 在片段打开之后和关闭之前以毫秒为单位的延迟,这将使动画在慢速设备上更加平滑,
animationDuration
- 每段动画的持续时间(以毫秒为单位),
isClosableOutside
- 如果菜单可以在触摸非按钮区域时关闭,
isFitSystemWindows
- 如果为 true,则将执行 fitSystemWindows(Rect) 的默认实现,
isClipToPadding
- true 将子项剪辑到组的填充,否则为 false。
如果您在主题中使用半透明参数,最后两个参数可能会很有用:
<item name="android:windowTranslucentStatus">true</item>
要将Context Menu
保留在状态栏下方,请将fitSystemWindows
设置为 true,将clipToPadding
设置为 false。
menuObject.textColor
的错误rtl
支持MenuParams
添加了gravity
参数setClosableOutside
问题。setAnimationDuration
不适用于开放事件的问题。Usage
中的块 5。ContextMenuDialogFragment
newInstance
方法已弃用。使用接收MenuParams
的新通用方法。MenuParams.setClosableOutside(boolean)
。MenuObject
构造函数。图像设置移至方法MenuObject
图像、背景、文本颜色、分隔线颜色的样式OnMenuItemLongClickListener
(用法:与OnMenuItemClickListener
相同,查看示例应用程序) 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(...)
如果您向我们发送使用我们组件的项目的链接,我们将非常高兴。只需发送电子邮件至 [email protected] 如果您对动画有任何疑问或建议,请告诉我们。
PS 我们将发布更多包含在代码中的精彩内容以及关于如何使 Android (iOS) 的 UI 变得更好的教程。敬请关注!
Copyright 2019, Yalantis
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.