Material Design 是用于指導用戶在各種平臺和設備上進行視覺、動作和互動設計的全面指南。如需在您的 Android 應用中使用 Material Design,請遵循?Material Design 規(guī)范中定義的準則,并使用?Material Design 支持庫中提供的新組件和樣式。
創(chuàng)新互聯(lián)公司主要從事成都做網站、網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務烏蘭,十年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220正篇 安卓中的Material Design作為Google旗下的一員——安卓,則是將其一些最具代表性一些控件和效果封裝在Material庫,這就讓我們開發(fā)者可以在不了解Material Design的情況下,也很容易將自己的應用Material化,當然現(xiàn)在在AndroidX庫中的一些組件也可以實現(xiàn)一些Material Design的效果。
BottomSheetDialogFragment組件 介紹這個組件在Material Design中分屬Bottom Sheets:
BottomSheetDialogFragment 繼承自 AppCompatDialogFragment,官方解釋為模態(tài)底部表,是 DialogFragment 的一個版本,它使用的是 BottomSheetDialog,而不是浮動對話框。
優(yōu)勢使用方法?1、擁有自己的生命周期;
2、可對整個頁面進行折疊、展開和銷毀;
3、可靈活使用自定義樣式。
implementation 'com.google.android.material:material:1.7.0'
添加好后Sync Gradle成功后,我們就可以在項目中添加BottomSheetDialogFragment了,很簡單,和正常寫繼承DialogFragment的Dialog一樣,因為在上述中我們看到了其繼承關系,BottomSheetDialogFragment是繼承自AppCompatDialogFragment,而
AppCompatDialogFragment又是繼承自DialogFragment。如此一來,由于BottomSheetDialogFragment是DialogFragment的子類,故它具有DialogFragment的所有特性。
Dialog部分的實現(xiàn)代碼:
class DialogMore : BottomSheetDialogFragment() {
private var height : Int = 0
fun newInstance(): DialogMore {
return DialogMore()
}
fun setDialogHeight(height: Int): DialogMore {
this.height = height
return this
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NORMAL, R.style.StyleBottomSheetDialogBg)
}
override fun onStart() {
super.onStart()
//拿到系統(tǒng)的 bottom_sheet
val bottomSheetDialog = (dialog as BottomSheetDialog?)!!
val view =
bottomSheetDialog.delegate.findViewById(com.google.android.material.R.id.design_bottom_sheet)!!
val behavior = BottomSheetBehavior.from(view)
//設置彈出高度
behavior.peekHeight = height
view.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
behavior.isHideable = false
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState)
val view = LayoutInflater.from(context).inflate(R.layout.layout_item_dialog_more, null)
dialog.setContentView(view)
view.vDownClose.setOnClickListener {
dismiss()
}
return dialog
}
}
可以看到,這部分實現(xiàn)代碼和我們平時寫底部彈窗方法差不多,不過我們在onStar()方法可以使用BottomSheetBehavior去控制彈窗本身的行為,比如高度控制和一些彈窗的屬性設置
在onCreateDialog方法中我們把彈窗布局加進去,使用setContentView()方法獲取到布局,一定要寫該方法,不然我們在獲取BottomSheetBehavior的時候* val behavior = BottomSheetBehavior.from(view)*這句會報空
而我們的彈窗需要頂部圓角,且去除背景陰影,所以增加了樣式:
該地方樣式在Dialog實現(xiàn)代碼處調用,在onCreate方法中使用setStyle()方法。
此外,我們還需要在自己的布局中添加圓角:
樣式可以添加在我們定義的彈窗布局最外層布局
Dialog樣例布局如下:
如果怕彈窗內部與外面的觸控效果產生沖突,最簡單的就是使用NestedScrollView控件,而不是普通的ScrollView布局
Activity的布局:
還有在Activity實現(xiàn)調用的代碼:
class MainActivity : AppCompatActivity() {
private var dialogHeight : Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
// 獲取dialog的高度
dialogHeight = vllSize.measuredHeight
// 獲取dialog的高度
Log.d( "MainActivity" ,"height = $dialogHeight")
}
override fun onResume() {
super.onResume()
vMore.setOnClickListener {
val dialog = DialogMore().newInstance()
.setDialogHeight(dialogHeight)
val ft: FragmentTransaction =
supportFragmentManager.beginTransaction()
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
dialog.show(ft, "DialogMore")
}
}
}
通過測量vllSize控件(剩余底部)的高度,我們可以將彈窗第一次彈窗的高度設置到這,當然高度可以由你任意設置,
在Dialog實現(xiàn)代碼中:
override fun onStart() {
super.onStart()
//拿到系統(tǒng)的 bottom_sheet
val bottomSheetDialog = (dialog as BottomSheetDialog?)!!
val view =
bottomSheetDialog.delegate.findViewById(com.google.android.material.R.id.design_bottom_sheet)!!
val behavior = BottomSheetBehavior.from(view)
//設置彈出高度
behavior.peekHeight = height
view.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
behavior.isHideable = false
}
view.layoutParams.height我們設置了第二次可把彈窗拉動到整個屏幕上
本文中實現(xiàn)的彈窗禁止了相信滑動關閉彈窗,所以不會滑到底部,代碼是Dialog實現(xiàn)中的屬性控制,不寫默認為true向下滑動關閉彈窗,false表示禁止該方式關閉彈窗:
behavior.isHideable = false
最終效果:
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧