• 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
  • 相关阅读:
    Struts2拦截器(Interceptor)
    在ORACLE中实现SELECT TOP N
    eclipse搭配Resin开发Struts应用之环境篇
    Struts2中有关strutsdefault.xml,struts.xml,struts.properties文件详解
    iframe自适应加载的页面高度
    struts2的action中获得request response session 对象
    Win32环境下的Tomcat5.5.17与apache2.2的集群
    故事,幽默,脑筋急转弯
    5岁的女儿让老爸帮她做某事......
    解决WIN2003不能玩CS1.5
  • 原文地址:https://www.cnblogs.com/Jason-Jan/p/8532977.html
Copyright © 2020-2023  润新知