├── .gitignore
├── .idea
├── caches
│ └── build_file_checksums.ser
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── cn
│ │ └── jakemesdg
│ │ └── commondialog
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── cn
│ │ │ └── jakemesdg
│ │ │ └── commondialog
│ │ │ ├── DialogOffsetActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── TestDataBean.java
│ │ │ ├── service
│ │ │ └── DialogService.java
│ │ │ └── widget
│ │ │ └── CustomDialog.java
│ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ ├── activity_dialog_offset.xml
│ │ ├── activity_main.xml
│ │ ├── dialog_common.xml
│ │ ├── dialog_from_bottom.xml
│ │ ├── dialog_offsetx.xml
│ │ ├── dialog_offsety.xml
│ │ ├── item_test.xml
│ │ ├── layout_footer.xml
│ │ └── layout_header.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── cn
│ └── jakemesdg
│ └── commondialog
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── lib
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── cn
│ │ └── jake
│ │ └── share
│ │ └── frdialog
│ │ ├── dialog
│ │ ├── FRBaseDialogBuilder.java
│ │ ├── FRDialog.java
│ │ └── FRDialogViewHelper.java
│ │ ├── image
│ │ └── CommonImageLoader.java
│ │ ├── interfaces
│ │ ├── FRDialogClickListener.java
│ │ └── FRDialogTextChangeListener.java
│ │ ├── recyclerview
│ │ ├── FRBaseDialogAdapter.java
│ │ ├── FRBaseDialogViewHolder.java
│ │ ├── interfaces
│ │ │ ├── MultiTypeAdapter.java
│ │ │ ├── RecyclerOnItemClickListener.java
│ │ │ └── RecyclerOnItemLongClickListener.java
│ │ └── wrap
│ │ │ ├── WrapRecyclerAdapter.java
│ │ │ └── WrapRecyclerView.java
│ │ └── util
│ │ ├── FRInputMethodManager.java
│ │ └── StringUtil.java
│ └── res
│ ├── anim
│ ├── default_dialog_anim_in.xml
│ ├── default_dialog_anim_out.xml
│ ├── dialog_from_bottom_anim_in.xml
│ └── dialog_from_bottom_anim_out.xml
│ ├── drawable
│ ├── dialog_btn_bg.xml
│ └── material_dialog_bg.xml
│ ├── layout
│ ├── dialog_material.xml
│ └── dialog_recyclerview.xml
│ └── values
│ ├── dialog_style.xml
│ └── strings.xml
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | .DS_Store
5 | /build
6 | /captures
7 | /.idea
8 | .externalNativeBuild
9 |
--------------------------------------------------------------------------------
/.idea/caches/build_file_checksums.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/24Kshign/FRDialog/ead3bb14f2d681e1bc0a3e44595f3c1b44385722/.idea/caches/build_file_checksums.ser
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FRDialog
2 |
3 | 用Builder模式重新打造一个dialog,案例中有两种Builder,分别是CommonBuilder和MDBuilder,如果还想实现其他的通用,继承自FRBaseDialogBuilder即可。
4 |
5 | [](https://bintray.com/cyg24kshign/maven/FRDialog/_latestVersion)
6 | [](https://github.com/24Kshign)
7 | [](https://img.shields.io/static/v1.svg?label=Api&message=15%2B&color=green)
8 |
9 | ### 注意
10 |
11 | 从2019.05.23日开始,该库升级为支持androidx,如果你的项目还没有升级支持的话,那么只能使用1.0.6之前的版本。
12 |
13 | ### 1、添加依赖
14 |
15 | Gradle:
16 |
17 | ```
18 | repositories {
19 | jcenter()
20 | }
21 |
22 | dependencies {
23 | //lastVersion请参照上述版本号
24 | compile 'com.jack.frdialog:FRDialog:latestVersion'
25 | }
26 | ```
27 |
28 | ### 2、使用案例
29 |
30 | #### 2.1、普通Dialog
31 |
32 | ```
33 | private void showCommonDialog() {
34 | final FRDialog dialog = new FRDialog.CommonBuilder(this)
35 | .setContentView(R.layout.dialog_common)
36 | .setText(R.id.dcu_tv_cancel, "否")
37 | .setText(R.id.dcu_tv_confirm, "是")
38 | .setText(R.id.dcu_tv_title, "温馨提示")
39 | .setText(R.id.dcu_tv_content, "1.文字文字我是文字文字文字我是文字文字文字我是文字!\n2.文字文字文字文字文字\n3.文字文字文字文字文字")
40 | .setDefaultAnim()
41 | .show();
42 |
43 | dialog.setText(R.id.dcu_tv_confirm, "确定");
44 |
45 | dialog.setOnClickListener(R.id.dcu_tv_cancel, new FRDialogClickListener() {
46 | @Override
47 | public boolean onDialogClick(View view) {
48 | Toast.makeText(MainActivity.this, "点击了否", Toast.LENGTH_SHORT).show();
49 | return true;
50 | }
51 | });
52 |
53 | dialog.setOnClickListener(R.id.dcu_tv_confirm, new FRDialogClickListener() {
54 | @Override
55 | public boolean onDialogClick(View v) {
56 | Toast.makeText(MainActivity.this, "点击了是", Toast.LENGTH_SHORT).show();
57 | return false;
58 | }
59 | });
60 | }
61 | ```
62 |
63 | 
64 |
65 | #### 2.2、MaterialDesign Dialog
66 |
67 | ```
68 | private void showMDDialog() {
69 | FRDialog dialog = new FRDialog.MDBuilder(this)
70 | .setMessage("1.文字文字我是文字文字!\n2.文字文字文字文字文字\n3.文字文字文字文字文字")
71 | .setTitle("温馨提示")
72 | .setNegativeContentAndListener("否", null)
73 | .setNegativeTextColor(ContextCompat.getColor(this,R.color.c999999))
74 | .setPositiveTextColor(ContextCompat.getColor(this,R.color.colorPrimary))
75 | .setPositiveContentAndListener("是", new FRDialogClickListener() {
76 | @Override
77 | public boolean onDialogClick(View view) {
78 | return true;
79 | }
80 | }).show();
81 | }
82 | ```
83 |
84 | 
85 |
86 | #### 2.3、从底部弹出来的Dialog
87 |
88 | ```
89 | FRDialog dialog = new FRDialog.CommonBuilder(this)
90 | .setContentView(R.layout.dialog_from_bottom)
91 | .setFullWidth()
92 | .setFromBottom()
93 | .show();
94 | ```
95 |
96 | 
97 |
98 | ### 3、特殊设置:
99 | 继承所有dialog的设置,同时还可以自定义以下设置
100 |
101 | ```
102 | //设置宽度全屏
103 | dialog.setFullWidth()
104 |
105 | //设置从底部弹出
106 | dialog.setFromBottom()
107 |
108 | //设置弹出动画
109 | dialog.setAnimation(int anim)
110 | ```
111 |
112 | ### 2018.5.24日更新
113 |
114 | 将mWidth改成mWidthRatio,不让用户设置一个具体的宽度,而是让用户去设置一个宽度比例,然后通过改变window的LayoutParams来设置dialog的宽高:
115 |
116 | ```
117 | WindowManager.LayoutParams lp = window.getAttributes();
118 | lp.width = (int) (baseBuilder.mContext.getResources().getDisplayMetrics().widthPixels * baseBuilder.mWidthRatio);
119 | lp.height = baseBuilder.mHeight;
120 | window.setAttributes(lp);
121 | ```
122 |
123 | 用法还是和之前一样:
124 |
125 | ```
126 | dialog.setWidthRatio(0——1) 默认是0.9
127 | ```
128 |
129 | ### 2018.7.19日更新
130 | 新增点击dialog中非EditText区域隐藏软键盘
131 |
132 | ```
133 | 重写dispatchTouchEvent方法进行拦截:
134 |
135 | /**
136 | * 点击dialog中除EditText以外的区域隐藏软键盘
137 | *
138 | * @param ev
139 | * @return
140 | */
141 | @Override
142 | public boolean dispatchTouchEvent(@NonNull MotionEvent ev) {
143 | FRInputMethodManager.autoHideSoftInput(this, ev);
144 | return super.dispatchTouchEvent(ev);
145 | }
146 |
147 | //核心方法
148 | public static boolean isAutoHideSoftInput(View view, MotionEvent event) {
149 | if (event.getAction() != MotionEvent.ACTION_DOWN) {
150 | return false;
151 | }
152 |
153 | if (!(view instanceof EditText)) {
154 | return false;
155 | }
156 |
157 | float x = event.getX();
158 | float y = event.getY();
159 |
160 | int[] location = {0, 0};
161 | view.getLocationInWindow(location);
162 | int left = location[0];
163 | int top = location[1];
164 | int bottom = top + view.getHeight();
165 | int right = left + view.getWidth();
166 | if (left <= x && x < right && top <= y && y < bottom) {
167 | // 点击事件在EditText的区域里
168 | return false;
169 | }
170 |
171 | return true;
172 | }
173 | ```
174 | 用法不变。
175 |
176 | ### 2018.9.11日更新
177 |
178 | 新增recyclerview样式的dialogBuilder
179 |
180 | 
181 |
182 | 具体功能有:
183 |
184 | - 设置一个列表布局,只需要传一个adapter就好了
185 |
186 | - 可以给列表添加头部和底部
187 |
188 | - 可以给dialog添加头部和底部
189 |
190 | 用法:
191 |
192 | ```
193 | private void showRecyclerViewDialog() {
194 | List