先放上地址GitHub,歡迎star,也歡迎給我發issues
LDialog
一個基於Google推薦的DialogFragment封裝的的庫,根據自身業務提取封裝,本庫全部使用kotlin
編寫,java
亦可呼叫,能滿足大部分的專案需求,能在Activity與Fragment中使用。本專案準則即是遵守最大化的自由程度。
本庫目前已具備的特點如下:
- 橫豎屏旋轉儲存Dialog屬性狀態(並且能保持DialogFragment的事件狀態,例如點選事件)
- 完全的自定義介面
- 豐富的介面屬性設定
- 完美的鍵盤自動彈出(並非使用延遲的方法)
使用建議:
DialogFragment相對於AlertDialog有很多優點。但對於只需要非常簡單資訊提示、僅需要原生樣式,以及不考慮橫豎屏的情況下,推薦使用更簡單的AlertDialog,請不要把簡單問題複雜化。DialogFragment適合用有UI要求、使用要求的情況下。
原始碼說明:
如果你還沒上手koltin,建議學習使用。本庫的環境版本如下:
- kotlin 1.2.51
- Android support 27.1.1
預覽
由於錄屏的限制無法錄製橫豎切換情況。請下載demo體驗
demo下載地址
獲取
本庫分為必須匯入的LDialog
和非必須的CustomLDialog
。
LDialog
為基礎庫;CustomLDialog
中包含了自定義的樣式,不需要可以不匯入。
先在 build.gradle 的 repositories 新增:
allprojects {
repositories {
...
maven { url `https://jitpack.io` }
}
}
複製程式碼
再在dependencies新增:
dependencies {
//必須匯入
implementation `com.github.limuyang2.LDialog:ldialog:1.0`
//3種自定義樣式,不使用就不匯入
implementation `com.github.limuyang2.LDialog:custom_ldialog:1.0`
}
複製程式碼
簡單使用
LDialog與CustonLDialog均繼承於BaseLDialog類。
init()中的引數,
Activity
中使用supportFragmentManager
,Fragment
中使用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()
複製程式碼
方法說明
方法名 | 說明 |
---|---|
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.
複製程式碼