• 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
  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/Jason-Jan/p/8532977.html
Copyright © 2020-2023  润新知