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)
}
MenuParams
객체를 받은 ContextMenuDialogFragment
의 newInstance
생성합니다. 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입니다.
테마에서 Translucent 매개변수를 사용하는 경우 마지막 두 매개변수가 유용할 수 있습니다.
<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.