先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
正文
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 });
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
展示效果:
![](https://images0.cnblogs.com/blog/234895/201308/09143512-1ebef1587b4244f797106c5fd47618f9.x-png)
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:当对话框使用多选列表,并且选中的时候触发。
示例:
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
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 });
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
展示效果:
![](https://images0.cnblogs.com/blog/234895/201308/09143542-dc1e0aca5cc84e26975799fbe0d13001.x-png)
AlertDialog的列表形式
AlertDialog除了展示一些提示信息,还可以展示一种列表的形式,需要使用到Builder.setItems(CharSequence\[\] items,DialogInterface.OnClickListener listener)方法进行设置,它需要传递一个CharSequenece类型的数组,以绑定列表的数据,它同样需要传递一个DialogInterface.OnClickListener接口,以响应列表项的点击,而这个接口中onClick方法的which参数,为当前点击触发项的items中的下标。
示例:
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
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 });
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
效果展示:
![](https://images0.cnblogs.com/blog/234895/201308/09143610-2125158ee86e485190f5ae7b13f41deb.x-png)
AlertDialog的单选列表
AlertDialog还可以使用一种单选的列表样式,使用Builder.setSingleChoiceItems(CharSequenece\[\] items,int checkedItem,DialogInterface.OnClickListener listener),这个方法具有多项重载,主要是为了应对不同的数据源,items为列表项数组,checkedItem为初始选项,listener为点击响应事件。有时候并不一定需要选中之后就关闭对话框,可以设置两个按钮,用于确定选择。
示例:
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
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 });
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
效果展示:
![](https://images0.cnblogs.com/blog/234895/201308/09144246-10b384a038f34be090d25d1cd8c99793.x-png)
AlertDialog多选列表
AlertDialog除了单选列表,还有多选的列表。可以使用Builder.setMultiChoiceItems(CharSequence\[\] items,boolean\[\] checkedItems,DialogInterface.OnMultiChoiceClickListener listener),这个方法也同样具有多样重载,对于这个方法,items以一个数组为数据源;checkedItems是默认的选项,因为是多选列表,所以如果设置需要全部设置,如果没有默认选中,则传Null;listener为多选项点击触发事件。
示例:
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
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 });
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
效果展示:
![](https://images0.cnblogs.com/blog/234895/201308/09145318-eab7363ba095437dad8c6ee8ef40aa31.x-png)
AlertDialog自定义样式
有些时候,Android自带的一些样式设置已经无法满足需求了,那么可以使用自定义样式,自定义个XML布局文件,用这个文件的内容作为AlertDialog的样式展示在屏幕上,这样就可以灵活定制对话框了。对于定制的XML文件,可以使用LayoutInflater.from(Context).inflate(int,ViewGroup)的方式对其进行动态加载,然后使用Builder.setView(View)把加载的视图与Builder对象进行关联,最后正常show()即可。
布局代码:
[![复制代码](http://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](https://ccccc.blog.csdn.net/article/details/49421071 "复制代码")
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=“单选列表选择对话框” />
35
36 <Button
37 android:id=“@+id/btnListViewMulti”
38 android:layout_width=“wrap_content”
39 android:layout_height=“wrap_content”
40 android:text=“多选列表选择对话框” />
41
42 <Button
43 android:id=“@+id/btnProgressDialog”
44 android:layout_width=“wrap_content”
45 android:layout_height=“wrap_content”
46 android:text=“滚动等待对话框” />
47
48 <Button
49 android:id=“@+id/btnProgressDialogH”
50 android:layout_width=“wrap_content”
51 android:layout_height=“wrap_content”
52 android:text=“进度条对话框” />
53 <Button
54 android:id=“@+id/btnCustomDialog”
55 android:layout_width=“wrap_content”
56 android:layout_height=“wrap_content”
57 android:text=“自定义对话框” />
58 </LinearLayout>
最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档
喜欢的朋友可以关注、转发、点赞 感谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
nCustomDialog"
55 android:layout_width=“wrap_content”
56 android:layout_height=“wrap_content”
57 android:text=“自定义对话框” />
58 </LinearLayout>
最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档
[外链图片转存中…(img-0QP5lPMs-1713445136621)]
[外链图片转存中…(img-kvp0N8GS-1713445136621)]
喜欢的朋友可以关注、转发、点赞 感谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-XQo5L5VB-1713445136621)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!