Periksa proyek ini di dribbble
Periksa proyek ini di Behance
Untuk implementasi yang berfungsi, lihat modul app
Tambahkan di root build.gradle Anda di akhir repositori:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Tambahkan ketergantungan
dependencies {
implementation 'com.github.Yalantis:Context-Menu.Android:1.1.4'
}
MenuObject
yang terdiri dari icon atau ikon dan deskripsi. Anda dapat menggunakan drawable, resource, bitmap, color
apa pun sebagai gambar:
menuObject.drawable = ...
menuObject.setResourceValue(...)
menuObject.setBitmapValue(...)
menuObject.setColorValue(...)
Anda dapat mengatur gambar ScaleType
:
menuObject.scaleType = ScaleType.FIT_XY
Anda dapat menggunakan resource, drawable, color
sebagai latar belakang:
menuObject.setBgResourceValue(...)
menuObject.setBgDrawable(...)
menuObject.setBgColorValue(...)
Sekarang Anda dapat dengan mudah menambahkan gaya tampilan teks untuk judul menu:
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
}
Anda dapat menggunakan color
apa pun sebagai warna teks:
menuObject.textColor = ...
Anda dapat mengatur color
apa pun sebagai warna pembagi:
menuObject.dividerColor = ...
Contoh:
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)
}
newInstance
dari ContextMenuDialogFragment
, yang menerima objek 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
}
Untuk pengalaman yang lebih baik, ukuran item menu harus sama dengan tinggi ActionBar
.
newInstance
dari ContextMenuDialogFragment
menerima objek MenuParams
yang memiliki kolom:
menuObjects
- daftar objek MenuObject,
animationDelay
- penundaan dalam mili setelah pembukaan fragmen dan sebelum penutupan, yang akan membuat animasi lebih lancar pada perangkat lambat,
animationDuration
- durasi setiap animasi dalam mili,
isClosableOutside
- jika menu dapat ditutup dengan sentuhan pada area non-tombol,
isFitSystemWindows
- jika benar, maka implementasi default fitSystemWindows(Rect) akan dijalankan,
isClipToPadding
- benar untuk menjepitkan anak ke padding grup, salah jika sebaliknya.
Dua parameter terakhir mungkin berguna jika Anda menggunakan parameter Translucent di tema Anda:
<item name="android:windowTranslucentStatus">true</item>
Agar Context Menu
tetap di bawah Bilah Status, atur fitSystemWindows
ke true dan clipToPadding
ke false.
menuObject.textColor
telah diperbaikirtl
gravity
untuk MenuParams
setClosableOutside
.setAnimationDuration
tidak berfungsi untuk masalah acara terbuka.Usage
.ContextMenuDialogFragment
newInstance
yang lama tidak digunakan lagi. Gunakan yang universal baru yang menerima MenuParams
.MenuParams.setClosableOutside(boolean)
.MenuObject
. Pengaturan gambar dipindahkan ke metodeMenuObject
, latar belakang, warna teks, warna pembagiOnMenuItemLongClickListener
(penggunaan: sama seperti OnMenuItemClickListener
, periksa aplikasi contoh) 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(...)
Kami akan sangat senang jika Anda mengirimi kami tautan ke proyek tempat Anda menggunakan komponen kami. Cukup kirim email ke [email protected] Dan beri tahu kami jika Anda memiliki pertanyaan atau saran mengenai animasi tersebut.
PS Kami akan menerbitkan lebih banyak kehebatan yang dibungkus dalam kode dan tutorial tentang cara membuat UI untuk Android (iOS) lebih baik daripada lebih baik. Pantau terus!
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.