一些类库:
https://github.com/qiushi123/CustomDialog
https://github.com/jiang111/IndicatorDialog
https://github.com/fython/MaterialPreferenceCompat
loading效果
https://github.com/d-max/spots-dialog
license
https://github.com/PSDev/LicensesDialog
Material
https://github.com/afollestad/material-dialogs
开源组件库
https://github.com/XXApple/AndroidLibs
1.定义Dialog样式
styles.xml
<style name="add_dialog" parent="@android:style/Theme.Dialog">
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 自己想要的背景 -->
<item name="android:windowBackground">@drawable/new_message_background</item>
<!-- 模糊 -->
<item name="android:backgroundDimEnabled">false</item>
</style>
2.自定义layout(根据自己的需要自定义)
3.自定义View
public class CustomDialog extends Dialog {
private View view;
public CustomDialog(Context context, int themeResId) {
super(context, themeResId);
//此处加载的布局就是上面自定义的layout
LayoutInflater inflater = LayoutInflater.from(context);
view = inflater.inflate(R.layout.new_message_dialog, null);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
}
//获取自定义layout中的控件
@Override
public View findViewById(int id) {
return super.findViewById(id);
}
//获取自定义布局view
public View getView() {
return view;
}
}
4.实例化
Dialog dialog = new CustomDialog(Context对象,R.style.add_dialog);
// Window dialogWindow = dialog.getWindow();
// WindowManager.LayoutParams lp = dialogWindow.getAttributes();
// dialogWindow.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
// lp.x = 100; // 新位置X坐标
// lp.y = 100; // 新位置Y坐标
// lp.width = 300; // 宽度
// lp.height = 100; // 高度
// dialogWindow.setAttributes(lp);
dialog.show();
用例
<style name="MyDialog" parent="android:style/Theme.Dialog">
<!--背景颜色及和透明程度-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--是否去除标题 -->
<item name="android:windowNoTitle">true</item>
<!--是否去除边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">false</item>
</style>
package com.lenovo.cava.widget;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.view.Window;
import com.lenovo.cava.R;
public class CavaDialog extends Dialog {
private TextView toastText;
private String mText;
public CavaDialog(Context context) {
super(context, R.style.MyDialog);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toast_layout);
setCanceledOnTouchOutside(false);
initView();
initData();
}
private void initView() {
toastText = (TextView) findViewById(R.id.toastText);
}
private void initData() {
if (mText != null)
toastText.setText(mText);
}
public void setMessage(String msg) {
mText = msg;
}
}
private CavaDialog mDialog;
private void showDialog(){
mDialog = new CavaDialog(mContext);
mDialog.getWindow().setWindowAnimations(R.style.DialogAnim);
int unicode = 0x1F60A;
//String emoji = new String(Character.toChars(unicode));
String tips = mContext.getResources().getString(R.string.not_your_phone);
//mDialog.setMessage(tips+" "+emoji);
mDialog.setMessage(tips);
mDialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ERROR));
mDialog.show();
}
<style name="DialogAnim">
<item name="@android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="@android:windowExitAnimation">@anim/dialog_exit</item>
</style>
dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromYDelta="100%p"
android:toYDelta="0%" />
</set>
dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="200"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>