LDialog基於DialogFragment封裝的庫,也許是一個Nice的庫

先放上地址GitHub,歡迎star,也歡迎給我發issuesjava

LDialog

一個基於Google推薦的DialogFragment封裝的的庫,根據自身業務提取封裝,本庫所有使用kotlin編寫,java亦可調用,能知足大部分的項目需求,能在Activity與Fragment中使用。本項目準則便是遵照最大化的自由程度。git

本庫目前已具有的特色以下:github

  • 橫豎屏旋轉保存Dialog屬性狀態(而且能保持DialogFragment的事件狀態,例如點擊事件)
  • 徹底的自定義界面
  • 豐富的界面屬性設置
  • 完美的鍵盤自動彈出(並不是使用延遲的方法)

使用建議: DialogFragment相對於AlertDialog有不少優勢。但對於只須要很是簡單信息提示、僅須要原生樣式,以及不考慮橫豎屏的狀況下,推薦使用更簡單的AlertDialog,請不要把簡單問題複雜化。DialogFragment適合用有UI要求、使用要求的狀況下。express

源碼說明:
若是你還沒上手koltin,建議學習使用。本庫的環境版本以下:apache

  • kotlin 1.2.51
  • Android support 27.1.1

預覽

因爲錄屏的限制沒法錄製橫豎切換狀況。請下載demo體驗bash

demo下載地址

demo apkapp

獲取

本庫分爲必須導入的LDialog和非必須的CustomLDialog
LDialog爲基礎庫;CustomLDialog中包含了自定義的樣式,不須要能夠不導入。
先在 build.gradle 的 repositories 添加:less

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}
複製代碼

再在dependencies添加:maven

dependencies {
	//必須導入
	implementation 'com.github.limuyang2.LDialog:ldialog:1.0'
	//3種自定義樣式,不使用就不導入
	implementation 'com.github.limuyang2.LDialog:custom_ldialog:1.0'
}
複製代碼

簡單使用

LDialog與CustonLDialog均繼承於BaseLDialog類。ide

init()中的參數,Activity中使用supportFragmentManagerFragment中使用childFragmentManager

CustonLDialog 使用方式

目前裏面包含3種自定義樣式:

  • IOSMsgDialog
  • MaterialMsgDialog
  • BottomTextListDialog

如下以MaterialMsgDialog爲示例:

//koltin
MaterialMsgDialog.init(supportFragmentManager) //Freagment中使用childFragmentManager
	.setTitle("Material Style")
	.setMessage("This is Material Design dialog!")
	.setNegativeButton("Decline", View.OnClickListener {
		Toast.makeText(this@MainActivity, "Decline", Toast.LENGTH_SHORT).show()
    })
    .setPositiveButton("Accept", View.OnClickListener {
        Toast.makeText(this@MainActivity, "Accept", Toast.LENGTH_SHORT).show()
    })
    .show()
複製代碼
//java
MaterialMsgDialog.Companion.init(getSupportFragmentManager())
	.setTitle("Material Style")
	.setMessage("This is Material Design dialog!")
	.setNegativeButton("Decline", new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			Toast.makeText(JavaDemo.this, "Decline", Toast.LENGTH_SHORT).show()
        }
    })
    .setPositiveButton("Accept", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(JavaDemo.this, "Accept", Toast.LENGTH_SHORT).show()
        }
    })
    .show();
複製代碼

LDialog 使用方式 (主要使用方式)

用對外提供使用 layoutRes 自定義佈局。
示例以下:

//kotlin
LDialog.init(supportFragmentManager)
	.setLayoutRes(R.layout.ldialog_share)
	.setBackgroundDrawableRes(R.drawable.shape_share_dialog_bg)
	.setGravity(Gravity.BOTTOM)
	.setWidthScale(0.95f)
	.setVerticalMargin(0.015f)
	.setAnimStyle(R.style.LDialogBottomAnimation)
	.setViewHandlerListener(object : ViewHandlerListener() {
		override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {
        	holder.setOnClickListener(R.id.cancelBtn, View.OnClickListener {
            	dialog.dismiss()
            })
       }
    })
    .show()
複製代碼

Java使用請參考項目下的 JavaDemo.java

方法說明

方法名 說明
setLayoutRes 設置佈局資源【優先級高於setLayoutView】【僅LDialog,必須】
setLayoutView 設置佈局view(不推薦使用)【僅LDialog,必須】
* setViewHandlerListener (重要)設置佈局中控件的屬性。若是【須要】考慮橫豎屏旋轉,則控件的相關屬性必須在此設置。建議對佈局中控件的設置均寫在此處。【僅LDialog,必須】
通用方法(BaseLDialog)
setBackgroundDrawableRes 彈窗背景資源文件id
setTag DialogFragment的標籤
setDismissListener 彈窗的關閉監聽
setGravity 窗體位置(例:Gravity.CENTER Gravity.TOP)
setWidthScale 佔屏幕寬度的比例(範圍0.0 - 1.0,當爲1.0時即爲鋪滿)【優先級高於setWidthDp】
setWidthDp Dialog的寬度,單位dp
setHeightScale 佔屏幕高度的比例(範圍0.0 - 1.0)【優先級高於setHeightDp】
setHeightDp Dialog的高度,單位dp
setKeepWidthScale 橫屏時,是否保持設置的寬度比例【僅當設置了寬度比例setWidthScale後,才生效】(默認false)
setKeepHeightScale 橫屏時,是否保持設置的高度比例【僅當設置了高度比例setHeightScale後,才生效】(默認false)
setVerticalMargin 設置垂直方向的Margin值(範圍0.0 - 0.1)
setCancelableAll 設置是否能夠點擊dialog外及返回鍵關閉dialog
setCancelableOutside 設置是否能夠點擊dialog外關閉dialog(返回鍵不受影響)
setAnimStyle 動畫Style資源文件id
setNeedKeyboardEditTextId 設置須要自動彈出鍵盤的控件id,必須是EditText類型的控件
show 顯示Dialog

高級使用

若是以上仍然沒法知足大家的需求,那能夠直接繼承BaseLDialog類,同時也就具有了通用方法。具體可參考CustonLDialog中的三個彈窗類。
基本寫法以下:

class ExKotlinLdialog : BaseLDialog<ExKotlinLdialog>() {

    override fun layoutRes(): Int = R.layout.ldialog_share

    override fun layoutView(): View? = null

    /** * 必須 * 若是【須要】考慮橫豎屏旋轉,則控件的相關屬性在此設置 * @return */
    override fun viewHandler(): ViewHandlerListener? {
        return object : ViewHandlerListener() {
            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {
                
            }
        }
    }

    /** * 可選 * 若是【不】考慮橫豎屏旋轉,也能夠在此設置控件屬性 * @param view */
    override fun initView(view: View) {

    }
}
複製代碼

Java使用請參考項目下的 ExJavaLdialog.java

License

2018 limuyang
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.
複製代碼
相關文章
相關標籤/搜索