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组件的更多相关文章

  1. Android面试收集录 Android入门

    1.Android的特点有哪些? 编程语言是Java或Kotlin,Android中的Java字节码是允许在Dalvik虚拟机上的 支持4大组件 Android内置了WebKit核心的浏览器,支持H5 ...

  2. Android面试收集录 Android布局

    1.请说出Android中的五种布局,并介绍作用? FrameLayout(堆栈布局),层叠方式显示,类似于PhotoShop上的层叠图层. LinearLayout(线性布局),将视图以水平或者垂直 ...

  3. Android面试收集录 Android系统的资源+其他

    1.Android应用程序的资源是如何存储的,如何使用? res文件夹或者assets文件夹 res目录中的资源在R类中生成一个int变量,然后再布局文件中可以直接使用,在代码中,要getResour ...

  4. Android面试收集录18 Android Context详解

    Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言 ...

  5. Android面试收集录9 IntentService详解

    一. 定义 IntentService是Android里面的一个封装类,继承自四大组件之一的Service. 二.作用 处理异步请求,实现多线程 三. 工作流程 注意:若启动IntentService ...

  6. Android面试收集录3 ContentProvider详解

    1.ContentProvider简单介绍 1.1.定义 ContentProvider,即内容提供者属于Android的四大组件之一. 1.2.作用 进程间进行数据交互&共享,即跨进程通信. ...

  7. Android面试收集录2 Broadcast Receiver详解

    1.Broadcast Receiver广播接收器简单介绍 1.1.定义 Broadcast Receiver(广播接收器),属于Android四大组件之一 在Android开发中,Broadcast ...

  8. Android面试收集录1 Activity+Service

    1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->on ...

  9. Android面试收集录16 Android动画总结

    一.Android 动画分类 总的来说,Android动画可以分为两类,最初的传统动画和Android3.0 之后出现的属性动画: 传统动画又包括 帧动画(Frame Animation)和补间动画( ...

随机推荐

  1. python入门22 pymssql模块(python连接sql server查询)

    安装 pip install pymssql 连接数据库 pymssql.connect() # coding:utf-8 import pymssql server = '192.168.8.1' ...

  2. POJ-2886 Who Gets the Most Candies?---线段树+约瑟夫环

    题目链接: https://cn.vjudge.net/problem/POJ-2886 题目大意: N个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数 ...

  3. linux自动备份文件 并上传到远程服务器 脚本实现

    (1)在服务器上创建备份目录,并赋予权限       mkdir -p /backup/bakdata  #新建数据备份目录(2)完成备份脚本操作新建脚本文件      vi bakdata.sh添加 ...

  4. 【[USACO15FEB]审查(黄金)Censoring (Gold)】

    从原来的单串匹配变成了多串匹配 好像也没什么特别不一样的地方 原来的做法是搞一个栈,之后一旦匹配到就往前弹栈 做法也一样 但是在\(AC\)自动机上暴力跳\(fail\)是要\(T\)的 我们并没有必 ...

  5. 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)

    Idea创建三层架构项目 首先创建一个Web项目model 创建Web完成后进行创建entity.dao.service 特别注意 根据上面的步骤进行创建即可得到 创建完成 我们首先创建数据库 cre ...

  6. P3909 异或之积

    P3909 异或之积 为什么叫做异或之积? 答曰:只要不关乎Alice和Bob就行 做完这道水题,感觉自己弱爆了. 一开始就要考虑暴力\(O(n^3)\)的优化. 然后就注意到了题目中的\(6\)为什 ...

  7. qbxt Day4

    1.树形dp 例题1 树上最长链 其实有两种方法,但为了简便,就只学了最通用的dp算法 我们考虑设dp[i][0/1]表示以i为根的最长路和次长路,然后拼接就行了 第二维0表示最长路,1表示次长路 i ...

  8. Autofac QuickStart

    1 构建应用程序 示例: 我们期望有一个输出工具类,当前希望通过控制台(console)输出,但是又希望仅能在控制台模式下输出.所以我们把输出抽象为一个接口 using System; namespa ...

  9. 关闭Debut.Log

    unity5.3支持了运行时关闭产生的debug.log Debug.logger.logEnabled = false; 谢谢你们,让我能在晚上凝视夜空的时候,脑海中浮现出更广阔的世界.

  10. Extjs treePanel 加载等待框

    beforeload : { fn : function (store, operation, eOpts){ loadMask = new Ext.LoadMask(Ext.get(this.get ...