总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的
还有高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
AlertDialog create():根据设置的属性,创建一个AlertDialog。
-
AlertDialog show():根据设置的属性,创建一个AlertDialog,并且显示在屏幕上。
-
AlertDialog.Builder setTitle():设置标题。
-
AlertDialog.Builder setIcon():设置标题的图标。
-
AlertDialog.Builder setMessage():设置标题的内容。
-
AlertDialog.Builder setCancelable():设置是否模态,一般设置为false,表示模态,要求用户必须采取行动才能继续进行剩下的操作。
Tips:AlertDialog.Builder的很多设置属性的方法,返回的均是这个AlertDialog.Builder对象,所以可以使用链式方式编写代码,这样更方便。
当一个对话框调用了show()方法后,展示到屏幕上,如果需要消除它,可以使用DialogInterface接口声明的两个方法,cancel()和dismiss()使对话框取消或者消除,这两个方法的作用是一样的,不过推荐使用dismiss()。Dialog和AlertDialog都实现了DialogInterface接口,所以只要是对话框,均可以使用这两个方法来消除对话框。
下面通过一个简单的Demo,先看看AlertDialog是如何提示信息的:
示例:
1 btnGeneral.setOnClickListener(new View.OnClickListener() { 2
3 @Override
4 public void onClick(View v) { 5 // TODO Auto-generated method stub
6 AlertDialog.Builder builder = new AlertDialog.Builder( 7 MainActivity.this);
8 builder.setTitle("提示");
9 builder.setMessage("这是一个普通的对话框!");
10 builder.setIcon(R.drawable.ic\_launcher);
11 builder.setCancelable(false);
12 builder.setPositiveButton("知道了!", new OnClickListener() {
13 @Override
14 public void onClick(DialogInterface dialog, int which) {
15 dialog.cancel();
16 }
17 });
18 builder.create().show();
19 }
20 });
展示效果:
AlertDialog的按钮
AlertDialog内置了三个按钮,可以直接使用setXxxButton()方法进行设置,对于一般的对话框,使用三个按钮基本上也够用了,下面是这三个方法的签名:
-
AlertDialog.Builder setPositiveButton(CharSquence text , DialogInterFace.OnClickListener):一个积极的按钮,一般用于“OK”或者“继续”等操作。
-
AlertDialog.Builder setNegativeButton(CharSquence text , DialogInterFace.OnClickListener):一个负面的按钮,一般用于“取消”操作。
-
AlertDialog.Builder setNeutralButton(CharSquence text , DialogInterFace.OnClickListener):一个比较中性的按钮,一般用于“忽略”、“以后提醒我”等操作。
上面介绍的DialogInterface接口,还提供了一系列的事件响应,这三个按钮均需要传递一个DialogInterFace.OnClickListener接口对象,实现其点击事件的触发,在这个接口中需要实现一个onClick(DialogInterface dialog,int which),dialog为当前触发事件的对话框对象接口,可以直接强制转换为AlertDialog进行操作;which为点击按钮的标识符,是一个整形的数据,对于这三个按钮而言,每个按钮使用不同的int类型数据进行标识:Positive(-1)、Negative(-2)、Neutral(-3)。
而除了专门为按钮点击实现的DialogInterFace.OnClickListener事件外,DialogInterface还提供了一些其他的事件,供Dialog对象响应,这些事件只是对Dialog声明周期各个状态的响应,一看就明白了,就不再详细讲解了,下面是这几个事件的说明:
-
interface DialogInterface.OnCancelListener:当对话框调用cancel()方法的时候触发。
-
interface DialogInterface.OnDismissListener:当对话框调用dismiss()方法的时候触发。
-
interface DialogInterface.OnShowListener:当对话框调用show()方法的时候触发。
-
interface DialogInterface.OnMultiChoiceListener:当对话框使用多选列表,并且选中的时候触发。
示例:
1 btnButtons.setOnClickListener(new View.OnClickListener() { 2
3 @Override
4 public void onClick(View v) { 5 // TODO Auto-generated method stub
6 AlertDialog.Builder builder = new AlertDialog.Builder( 7 MainActivity.this);
8 builder.setTitle("提示");
9 builder.setMessage("这是一个多按钮普通的对话框!");
10 builder.setIcon(R.drawable.ic\_launcher);
11 builder.setPositiveButton("确定", new OnClickListener() {
12
13 @Override
14 public void onClick(DialogInterface dialog, int which) {
15 Toast.makeText(MainActivity.this, "确定被点击",
16 Toast.LENGTH\_SHORT).show();
17 dialog.dismiss();
18 }
19 });
20 builder.setNegativeButton("否定", new OnClickListener() {
21
22 @Override
23 public void onClick(DialogInterface dialog, int which) {
24 // TODO Auto-generated method stub
25 Toast.makeText(MainActivity.this, "否定被点击",
26 Toast.LENGTH\_SHORT).show();
27 dialog.dismiss();
28 }
29 });
30 builder.setNeutralButton("忽略", new OnClickListener() {
31
32 @Override
33 public void onClick(DialogInterface dialog, int which) {
34 // TODO Auto-generated method stub
35 Toast.makeText(MainActivity.this, "忽略被点击",
36 Toast.LENGTH\_SHORT).show();
37 dialog.cancel();
38 }
39 });
40 builder.show();
41 }
42 });
展示效果:
AlertDialog的列表形式
AlertDialog除了展示一些提示信息,还可以展示一种列表的形式,需要使用到Builder.setItems(CharSequence[] items,DialogInterface.OnClickListener listener)方法进行设置,它需要传递一个CharSequenece类型的数组,以绑定列表的数据,它同样需要传递一个DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点击触发项的items中的下标。
示例:
1 btnListView.setOnClickListener(new View.OnClickListener() { 2
3 @Override
4 public void onClick(View v) { 5 // TODO Auto-generated method stub
6 AlertDialog.Builder builder = new AlertDialog.Builder( 7 MainActivity.this);
8 builder.setTitle("请选择城市");
9 //items使用全局的finalCharSequenece数组声明
10 builder.setItems(items, new OnClickListener() {
11 @Override
12 public void onClick(DialogInterface dialog, int which) {
13 // TODO Auto-generated method stub
14 String select\_item = items\[which\].toString();
15 Toast.makeText(MainActivity.this,
16 "选择了---》" + select\_item, Toast.LENGTH\_SHORT)
17 .show();
18 }
19 });
20 builder.show();
21 }
22 });
效果展示:
AlertDialog的单选列表
AlertDialog还可以使用一种单选的列表样式,使用Builder.setSingleChoiceItems(CharSequenece[] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具有多项重载,主要是为了应对不同的数据源,items为列表项数组,checkedItem为初始选项,listener为点击响应事件。有时候并不一定需要选中之后就关闭对话框,可以设置两个按钮,用于确定选择。
示例:
1 btnListViewSingle.setOnClickListener(new View.OnClickListener() { 2 @Override
3 public void onClick(View v) { 4 // TODO Auto-generated method stub
5 AlertDialog.Builder builder = new AlertDialog.Builder( 6 MainActivity.this);
7 builder.setTitle("请选择一下城市");
8 builder.setSingleChoiceItems(items, 1, new OnClickListener() { 9
10 @Override
11 public void onClick(DialogInterface dialog, int which) {
12 // TODO Auto-generated method stub
13 String select\_item = items\[which\].toString();
14 Toast.makeText(MainActivity.this,
15 "选择了--->>" + select\_item, Toast.LENGTH\_SHORT)
16 .show();
17 }
18 });
19 builder.setPositiveButton("确定", new OnClickListener() {
20 @Override
21 public void onClick(DialogInterface dialog, int which) {
22 dialog.dismiss();
23 }
24 });
25 builder.show();
26 }
27 });
效果展示:
AlertDialog多选列表
AlertDialog除了单选列表,还有多选的列表。可以使用Builder.setMultiChoiceItems(CharSequence[] items,boolean[] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也同样具有多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,因为是多选列表,所以如果设置需要全部设置,如果没有默认选中,则传Null;listener为多选项点击触发事件。
示例:
1 btnListViewMulti.setOnClickListener(new View.OnClickListener() { 2
3 @Override
4 public void onClick(View v) { 5 // TODO Auto-generated method stub
6 AlertDialog.Builder builder = new AlertDialog.Builder( 7 MainActivity.this);
8 builder.setTitle("请选择城市");
9 builder.setMultiChoiceItems(items, new boolean\[\] { true, false,
10 true }, new OnMultiChoiceClickListener() {
11 @Override
12 public void onClick(DialogInterface dialog, int which,
13 boolean isChecked) {
14 // TODO Auto-generated method stub
15 String select\_item = items\[which\].toString();
16 Toast.makeText(MainActivity.this,
17 "选择了--->>" + select\_item, Toast.LENGTH\_SHORT)
18 .show();
19 }
20 });
21 builder.setPositiveButton("确定", new OnClickListener() {
22 @Override
23 public void onClick(DialogInterface dialog, int which) {
24 dialog.dismiss();
25 }
26 });
27 builder.show();
28 }
29 });
效果展示:
AlertDialog自定义样式
有些时候,Android自带的一些样式设置已经无法满足需求了,那么可以使用自定义样式,自定义个XML布局文件,用这个文件的内容作为AlertDialog的样式展示在屏幕上,这样就可以灵活定制对话框了。对于定制的XML文件,可以使用LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,然后使用Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()即可。
布局代码:
1 <LinearLayout xmlns:android\="http://schemas.android.com/apk/res/android"
2 xmlns:tools\="http://schemas.android.com/tools"
3 android:layout\_width\="match\_parent"
4 android:layout\_height\="match\_parent"
5 android:orientation\="vertical"
6 android:paddingBottom\="@dimen/activity\_vertical\_margin"
7 android:paddingLeft\="@dimen/activity\_horizontal\_margin"
8 android:paddingRight\="@dimen/activity\_horizontal\_margin"
9 android:paddingTop\="@dimen/activity\_vertical\_margin"
10 tools:context\=".MainActivity" \>
11
12 <Button
13 android:id\="@+id/btnGeneral"
14 android:layout\_width\="wrap\_content"
15 android:layout\_height\="wrap\_content"
16 android:text\="普通对话框" />
17
18 <Button
19 android:id\="@+id/btnButtons"
20 android:layout\_width\="wrap\_content"
21 android:layout\_height\="wrap\_content"
22 android:text\="多按钮的普通对话框" />
23
24 <Button
25 android:id\="@+id/btnListView"
26 android:layout\_width\="wrap\_content"
27 android:layout\_height\="wrap\_content"
28 android:text\="列表选择对话框" />
29
30 <Button
31 android:id\="@+id/btnListViewSingle"
32 android:layout\_width\="wrap\_content"
33 android:layout\_height\="wrap\_content"
34 android:text\="单选列表选择对话框" />
## 总结
首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。
另外一部分原因在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
**最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!**
![](https://img-blog.csdnimg.cn/img_convert/414866897a23ce51966aaf7c2910cc31.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/39d13d4868643d6d4d4c4444806a56f3.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/9571c8cae907a4a17a97187188fcc456.webp?x-oss-process=image/format,png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
在于资料也还没有看完,一面时凭借那份资料考前突击恶补个几天居然也能轻松应对(在这里还是要感谢那份资料,真的牛),于是自我感觉良好,资料就没有怎么深究下去了。
之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。
下一步还是要查漏补缺,进行针对性复习。
**最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!**
[外链图片转存中...(img-ekEeIEPn-1714995067861)]
[外链图片转存中...(img-I5rA3YEW-1714995067861)]
[外链图片转存中...(img-AiguOX2z-1714995067862)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**