真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Android開發(fā)的UI設計——MaterialDesign-創(chuàng)新互聯(lián)

前言

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的所有特性。

實現(xiàn)需求

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元起,快前往官網查看詳情吧


網站欄目:Android開發(fā)的UI設計——MaterialDesign-創(chuàng)新互聯(lián)
網站鏈接:http://weahome.cn/article/jhsgp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部