Android面试收集录 Android组件
1.请说出Android SDK支持哪些方式显示富文本信息?
- 使用TextView组件可以显示富文本信息,如果要实现图文混排,需实现ImageGetter接口
- 使用WebView组件显示HTML页面
- 自定义View,覆盖onDraw方法,可以直接绘制富文本
- TextView组件显示图像还可以使用ImageSpan对象
2.TextView组件如何显示图像?
- 使用<img>标签在TextView组件中显示图像,需要CharSequence配合
- 使用ImageSpan对象在TextView组件中显示图像,需要SpannableString配合
3.TextView有一个URL,点击后要跳转到一个活动,怎么实现?
- 采用SpannableString定义文字
- 通过SpannableString的一个setSpan方法+注册ClickableSpan点击事件
- textView设置spannableString
- textView设置LinkMovementMethod对象
4.如何为TextView组件中显示的文本添加背景色?
- 使用BackgroundColorSpan对象可以设置文字背景色。
5.如何设计电子词典程序,当输入单词时,应显示输入单词开头的单词列表?
- 使用AutoCompleteTextView
- 配合TextWatcher的afterTextChanged实现,数据通过检索数据库用游标获取
6.如何让一个显示图像的按钮在不同状态下显示不同的图像?
- 使用drawable资源
- 在drawable目录中建立一个XML文件,在<selector>标签中农指定各种状态对应的状态图像
- android:state_pressed="true",代表按钮按下的状态
- android:state_focused="true",代表按钮处于焦点时状态
7.如何实现图像的半透明度?
- 使用Paint.setAlpha方法设置
- 可以再不透明的图层上覆盖一层半透明的膜
8.如何在ImageView组件中显示图像的一部分?
- 使用Bitmap.createBitmap方法,Bitmap.createBitmap(sourceBitmap,20,20,100,100)截取坐标范围图像。
- 利用图像剪切资源实现,局限性是只能截取一端的图像。
9.请描述如何使用Matrix对象旋转和缩放图像?
首先生成一个Matrix对象。 Matrix matrix=new Matrix();
- 旋转:matrix.setRotate(45)==>顺时针旋转45度。
- 缩放:matrix.setScale((float)0.5,(float)0.5);
10.ProgressBar的进度条颜色是否可以修改?
- 可以。
- ProgressBar有3种颜色,第一进度条颜色,第二进度条颜色,背景颜色。
- 可以使用图层列表layer-list修改这三种颜色。
- 然后再资源布局中的ProgressBar标签中使用android:progressDrawable属性指定资源id。
11.如何对GridView、ListView等列表组件中的数据进行增、删、改操作?
- 首先对数据源中的数据进行增删改操作
- 然后调用BaseAdapter.notifyDataSetInvalidated方法更新数据
12.如何优化类似于相册,一下子加载很多缩略图?
- 使用任务队列技术
- 可以使用数组或List对象建立任务队列和数据缓冲
- getView遇到比较耗时的操作,就将这个操作加入任务队列
- 用子线程从任务队列中取得任务,并执行相应的任务
- 最后调用BaseAdapter.notifyDataSetChanged方法刷新列表
13.如何使容器内的组件可以水平和垂直滑动?
- 将ScrollView和HorizontalScrollView组件结合使用
14.如何将可视化组件封装在jar文件中以及如何通过Java代码适应不同屏幕分辨率?
- 直接将.class文件放到jar文件中即可,组件使用的资源文件要放到res目录中。
- 屏幕分辨率主要是将dp或sp转换成实际的像素点。
15.如何编写一个自定义可视组件?
- 法1:扩展现有的组件,如继承TextView。
- 法2:组合多种组件,如继承容器,将多个组件放进去。
- 法3:直接继承View,从零开始编写。
- 注意点:要考虑屏幕分辨率的问题,将dp或sp转换为实际的像素点。
16.Android支持的四大组件可以封装在jar文件中吗?
- 可以
- 静态引用jar文件
- 仍然需要在AndroidManifest.xml文件中进行注册
17.如何将classes.dex文件打包成jar文件?
- jar cvf my.jar classes.dex
18.在Android应用程序中Java与JavaScript如何交互?
- 使用webView进行交互。
- 通过WebSetting配置webView的属性。
- webView通过addJavaScriptInterface来设置接口,处理相应逻辑。
19.写出安装apk程序的代码?
- Intent intent=new Intent(Intent.ACTION_VIEW);
- String filePath="/sdcard/...apk";
- intent.setDataAndType(Uri.parse("file://"+filePath),"application/vnd.android.package-archive");
- startActivity(intent);
20.如何配置Activity才能让程序启动时将该Activity作为启动窗口?
- 定义Main动作==><action android:name="android.intent.action.MAIN">
- 指定这个category==><category android:name="android.intent.category.LAUNCHER">
21.Activity生命周期?
- onCreate==>onStart==>onResume==>onPause==>onStop==>onRestart==>onDestroy
- 打开某个活动,再按了home键 ==>onCreate==>onStart==>onResume==>onPause==>onStop
- 然后又回到当前活动 ==>onRestart==>onStart==>onResume
22.在Activity之间如何传递数据的方式有哪些?
- Intent对象,与Bundle配合使用
- 静态变量
- 剪切板,将数据保存在剪切板中,需使用ClipboardManager
- 全局对象,Application
- 文件方式,sharePerference
23.调用系统活动的一些方法?
- 拨号:new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678900"));
- 传入拨号:new Intent(Intent.ACTION_DIAL,Uri.parse("tel:12345678900"));
- 调用拨号:new Intent("com.android.phone.action.TOUCH_DIALER");
- 调用系统浏览器:new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
- 查看联系人:new Intent("com.android.contacts.action.LIST_CONTACTS");
- 系统设置:new Intent("android.settings.SETTINGS");
- 查看WiFi:new Intent("android.settings.WIFI_SETTINGS");
24.如何将Activity变成半透明的对话框?
- 在清单中定义一个主题android:theme="@style/MyTheme"
- 然后再style资源文件中定义一个MyTheme,注意style的parent是@android:style/Theme.Dialog即可变成对话框形式
- 在资源文件中添加一个android:windowBackground属性
25.如何设置Activity显示和关闭时的动画效果?
- 首先在anim文件中定义两个动画,R.anim.fade_in,R.anim.fade_out
- 然后再startActivity后,添加overridePendingTransition(R.anim.fade_in,R.anim.fade_out);
26.如何接收广播?
- 编写一个广播接收器类,继承BroadcastReceiver或子类。(在重写的onReceive处理逻辑)
- 在AndroidManifest.xml文件中注册,采用<receiver>的标签注册
27.如何获取短信内容?
- 编写一个广播接收器,在清单中配置好短信广播<action android:name="android.provider.Telephony.SMS_RECEIVED">
- 在重写的onReceive中,从intent获取数据,和SmsMessage配合获取内容
28.如何拦截来电?
- 编写一个广播接收器,在清单中配置好来电广播<action android:name="android.intent.action.PHONE_STATE">
- 继续在清单中添加监听来电状态的权限
- 在重写的onReceive利用反射技术配合TelephonyManager处理来电
29.如何拦截手机屏幕休眠和唤醒的动作?
- 只能动态注册接收器,不能静态注册
- 利用IntentFilter.addAction(Intent.ACTION_ACREEN_ON)设置屏幕唤醒广播的动作
- 利用IntentFilter.addAction(Intent.ACTION_ACREEN_OFF)设置屏幕休眠广播的动作
30.如何让一个Activity在开机后自动显示?
- 编写一个广播接收器,在清单中配置<action android:name="android.intent.action.BOOT_COMPLETED">
- 重写onReceive方法,在广播接收器中显示Activity,必须设置FLAG_ACTIVITY_NEW_TASK,因为服务中没有前一个活动的栈
31.如何发送广播?
- 利用sendBroadcast方法
- 先指定广播动作:new Intent("mobile.android.MYBROADCAST");
- 添加category: 上面的intent.addCategory("mobile.android.mycategory");
- 设置广播数据:上面的intent.putExtra("name","broadcast_data");
- 发送广播:sendBroadcast(intent);
32.请描述一下Service的生命周期?
第一种方式startService+stopService
- onCreate()==>创建服务
- onStartCommand()==>开始服务
- onDestroy()==>销毁服务
第二种方式bindService+unbindService
- onCreate->onBind->onUnBind->onDestroy
33.请阐述一下开发AIDL服务的步骤?
- 创建一个扩展名为aidl的文件。
- make project==>自动生成一个Java接口文件。
- 建立一个服务类。
- 实现由aidl文件生成的Java接口。
- 在AndroidManifset.xml文件中配置AIDL服务。
34.如何编写一个可以传递Product对象的AIDL服务?
- 首先编写一个Product基础类型,实现了Parcelable接口(注意需要定义一个名为CREATOR的变量,里面还有两个重写的函数)
- 然后建立Product.aidl文件,里面只有一行代码:parcelable Product;
- 然后再建立一个服务IMyService.aidl,里面定义了一个服务接口IMyService,注意输入参数需要用in修饰
- 然后编写AIDL服务类MyService,里面定义了内部类继承了IMyService.Stub,在onBind中返回一个实例。
- 最后在AndroidManifest.xml配置AIDL服务,采用<service>标签配置MyService
- 客户端调用:bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);注意serviceConnection要自己定义,里面获得AIDL服务对象。
35.如何读取联系人信息?
- 使用Content Provider内容提供器来访问。
- 先用游标Cursor存储从ContactsContract.Contacts.CONTTENT_URI中查询的数据
- 在用SimpleCursorAdapter显示联系人列表
- 注意要在AndroidManifest.xml中添加权限READ_CONTRACTS
36.如何查询收发的短信信息?
- 使用Content Provider内容提供其来访问。
- 先用游标Cursor存储从Uri.parse("content://sms")中查询的消息
- 如果只查收件箱,则改成content://sms/inbox
- 如果只查发件箱,则改成content://sms/outbox
- 注意读取短信信息要在AndroidManifest.xml文件中打开权限READ_SMS
37.请描述Content Provider URI有那几部分组件?
- 有4部分组成
- content:// ==>相当于Http URI中的http://
- authority ==>相当于Http URI中的域名
- 路径(path)
- 参数(param)
- 例子:content://jason.android.mydata/table1/20
38.如何开发一个Content Provider?
- 编写一个类,继承ContentProvider
- 实现所有的抽象方法
- 定义Content Provider的URI,URI的形式为 content://authority/path/param
- 使用UriMatcher对象映射Uri和返回码
- 根据实际的需要实现相应的方法
- 实现query,insert,delete,update方法需要先用UriMatcher.match方法映射成返回码,然后进行相应的处理
- 在AndroidManifest.xml文件中使用<provider>标签注册
39.如何得知系统定义了哪些访问权限?
- 命令行:adb shell pm list permissions
Android面试收集录 Android组件的更多相关文章
- Android面试收集录 Android入门
1.Android的特点有哪些? 编程语言是Java或Kotlin,Android中的Java字节码是允许在Dalvik虚拟机上的 支持4大组件 Android内置了WebKit核心的浏览器,支持H5 ...
- Android面试收集录 Android布局
1.请说出Android中的五种布局,并介绍作用? FrameLayout(堆栈布局),层叠方式显示,类似于PhotoShop上的层叠图层. LinearLayout(线性布局),将视图以水平或者垂直 ...
- Android面试收集录 Android系统的资源+其他
1.Android应用程序的资源是如何存储的,如何使用? res文件夹或者assets文件夹 res目录中的资源在R类中生成一个int变量,然后再布局文件中可以直接使用,在代码中,要getResour ...
- Android面试收集录18 Android Context详解
Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言 ...
- Android面试收集录9 IntentService详解
一. 定义 IntentService是Android里面的一个封装类,继承自四大组件之一的Service. 二.作用 处理异步请求,实现多线程 三. 工作流程 注意:若启动IntentService ...
- Android面试收集录3 ContentProvider详解
1.ContentProvider简单介绍 1.1.定义 ContentProvider,即内容提供者属于Android的四大组件之一. 1.2.作用 进程间进行数据交互&共享,即跨进程通信. ...
- Android面试收集录2 Broadcast Receiver详解
1.Broadcast Receiver广播接收器简单介绍 1.1.定义 Broadcast Receiver(广播接收器),属于Android四大组件之一 在Android开发中,Broadcast ...
- Android面试收集录1 Activity+Service
1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->on ...
- Android面试收集录16 Android动画总结
一.Android 动画分类 总的来说,Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画: 传统动画又包括 帧动画(Frame Animation)和补间动画( ...
随机推荐
- 关于SessionFactory的不同实现类分别通过getCurrentSession()方法 和 openSession() 方法获取的Session对象在保存对象时的一些区别
一.单向多对一关联关系 一).使用LocalSessionFactoryBean类,即在applicationContext中配置的 <!-- 配置SessionFactory 使用LocalS ...
- Multi-Thread 1: how to use synchronized
1. synchronized If two threads are using the same function( here we use output to print out string) ...
- RabbitMQ .NET Client 实战实验
由于公司业务需求,最近想上RabbitMQ,之前我研究了一段时间微软的MSMQ.开源队列有很多,各有优劣.就先拿RabbitMQ练练手吧.本篇着重代码部分,至于怎么安装,怎么配置不在赘述.而且代码是在 ...
- 【洛谷P1351】[NOIP2014]联合权值
联合权值 题目链接 首先,直接两重循环暴力枚举得了70分 然后发现第二重循环可以记忆化一下 记忆一下每个点的子节点的权值和.最大值. 次大值(为了处理该点的父节点权值恰好为最大值) 具体看代码 #in ...
- Android学习笔记_55_Tween动画 (渐变、缩放、位移、旋转)
Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变).第二类就是 Frame动画,即顺序的播放事先做好的图像,与gi ...
- sql中 decode() 的用法
sql中 decode() 的用法 SELECT ID,DECODE(inParam,'Param','value1' ,'value2') name FROM yytj2018 如果 inParam ...
- python之ProcessPoolExecutor
ProcessPoolExecutor使用上基本与ThreadPoolExecutor一致不过在windows上使用,有个问题需要注意.使用不当会出现如下错误 File "...\lib\m ...
- 如何使用Xcode的Targets来管理开发和生产版本的构建
如何使用Xcode的Targets来管理开发和生产版本的构建 想象一下,你已经完成了应用程序的开发和测试,现在准备提交正式版本.问题是,一些web服务的url指向了测试服务器,同时API密钥被配置用于 ...
- git简单配置
1.安装完git查看版本 git --version 2.配置用户名邮箱 git config --global user.name "chencheng" git config ...
- Configuration 中无法自动注入依赖于component的bean
出现问题时我这样使用依赖注入 @Configuration public class WebServiceConfig { @Autowired private IMessageWebService ...