2024年安卓最全android学习---Dialog(1),大厂面试必备技能

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的
还有高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

跨平台开发:Flutter.png

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值