先放上地址GitHub,歡迎star,也歡迎給我發issuesjava
一個基於Google推薦的DialogFragment封裝的的庫,根據自身業務提取封裝,本庫所有使用kotlin
編寫,java
亦可調用,能知足大部分的項目需求,能在Activity與Fragment中使用。本項目準則便是遵照最大化的自由程度。git
本庫目前已具有的特色以下:github
使用建議: DialogFragment相對於AlertDialog有不少優勢。但對於只須要很是簡單信息提示、僅須要原生樣式,以及不考慮橫豎屏的狀況下,推薦使用更簡單的AlertDialog,請不要把簡單問題複雜化。DialogFragment適合用有UI要求、使用要求的狀況下。express
源碼說明:
若是你還沒上手koltin,建議學習使用。本庫的環境版本以下:apache
- kotlin 1.2.51
- Android support 27.1.1
因爲錄屏的限制沒法錄製橫豎切換狀況。請下載demo體驗bash
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
中使用supportFragmentManager
,Fragment
中使用childFragmentManager
目前裏面包含3種自定義樣式:
如下以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();
複製代碼
用對外提供使用 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()
複製代碼
方法名 | 說明 |
---|---|
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
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.
複製代碼