您好,欢迎来到帮我找美食网。
搜索
您的当前位置:首页2021年国家开放大学电大Android核心开发技术练习题答案

2021年国家开放大学电大Android核心开发技术练习题答案

来源:帮我找美食网
练习题1

在Android平台架中,浏览器位于( )。 正确答案是:应用层

使用Android Studio创建项目时,关于“Company Domain”说法正确的是( )。 正确答案是:公司域名

Android是在( )发布的1.0版本。 正确答案是:2008年9月

Android目前的推荐开发工具是( )。 正确答案是:Android Studio Intent的用处不包含 ( )。 正确答案是:打开一个Fragment

一个Activity首次创建会调用( )生命周期方法。 正确答案是:onCreate( )

Activity全生命周期中,第一个需要执行的方法是( )。 正确答案是:onCreate()

Activity可视生命周期中,第一个需要执行的方法是( )。 正确答案是:onStart()

Android Studio是基于哪个Java集成开发环境?( ) 正确答案是:IntelliJ IDEA

Android 项目工程下面的 assets 目录的作用是( )。

正确答案是:主要放置一些文件资源,这些文件会被原封不动打包到 apk 里面 Android应用主要的开发语言是( )。 正确答案是:Java

Android开发中常用的开发与调试工具有很多,下面相关描述不对的是( )。

正确答案是:Android Debug Bridge,简称adb,它只是一个能用来调试Android应用程序的工具 Android虚拟设备的缩写是( )。 正确答案是:AVD

onPause()什么时候调用? 正确答案是:当界面被隐藏时 下列说法正确的是( )。

正确答案是:每个进程都运行于自己的 java 虚拟机(VM)中 下面关于Linux内核描述错误的是( )。

正确答案是:由于Linux内核全部使用Java语言编写,故Android的Linux内核层也全部是用Java语言编写的 下面选项中,( )是Android的四大组件之一。 正确答案是:Activity

以下关于移动互联网的说法正确的是( )。

正确答案是:移动互联网是将移动通讯和互联网二者结合起来 使用Android Studio创建项目时,“Minimum SDK”的意思是( )。 正确答案是:最低支持的Android API版本

使用Android Studio创建项目时,关于“Company Domain”说法正确的是( )。 正确答案是:公司域名

使用Android Studio创建项目时,关于“Package name”说法不正确的是( )。 正确答案是:默认与“Company Domain”有关,不可以单独设置 Package name 关于Android系统的优势,不正确的是( )。 正确答案是:与运营商捆绑 启动Activity的方法是( )。 正确答案是:startActivity()

在Android应用程序中,图片应放在( )目录下。 正确答案是:drawable

对于“src/main/res/layout”目录,以下正确的是( )。 正确答案是:用来保存与用户界面相关的布局文件

使用Android Studio创建一个项目后,Android Studio会自动创建相应的项目结构。 正确答案是:“对”。

我们在写Android项目时可以直接使用Android提供的控件。 正确答案是:“对”。

singleTop模式启动的Activity在Activity栈中只存在一个。 正确答案是:“错”。

Activity中,setContentView必须要放在findViewById之前。 正确答案是:“对”。

Activity可以表现为一个悬浮窗体。 正确答案是:“对”。

Activity可以通过一个别名去访问。 正确答案是:“错”。

Activity是为用户操作而展示的可视化用户界面。 正确答案是:“对”。

AndroidManifest文件的扩展名是apk。 正确答案是:“错”。

Android的隐式意图至少包含一个category:\"android.intent.category.DEFAULT\"。 正确答案是:“对”。

Fragment 必须总是被嵌入到一个activity中, 它们的生命周期直接被其所属的宿主activity的生命周期影响。 正确答案是:“对”。

Fragment 表现 Activity 中用UI的一个行为或者一部分。 正确答案是:“对”。

Fragment与Activity之间传递数据一般使用setArgument()。 正确答案是:“对”。

Fragment可以独立于Activity存在。 正确答案是:“错”。

O2O即Online To Offline(在线离线/线上到线下),是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台。

正确答案是:“对”。

一个应用程序可以有若干个Activity。 正确答案是:“对”。

以下关于Android 的日志输出,Log.i()是输出普通消息。 正确答案是:“对”。

以下关于Android 的日志输出,Log.w()是输出调试信息。 正确答案是:“错”。

以下关于Android 的日志输出,警告消息的颜色是绿色。 正确答案是:“错”。

以下关于Android 的日志输出,错误消息的颜色是橙色。 正确答案是:“错”。

使用Fragment时,除了可以继承Fragment,还可以继承DialogFragment、ListFragment、PreferenceFragment。 正确答案是:“对”。

可以通过设置android:theme=\"@android:style/Theme.Dialog\",使Activity显示为对话框模式。 正确答案是:“对”。

可视生命周期是Activity在界面上从可见到不可见的过程。 正确答案是:“对”。

在Android平台架构中,底层是基于Windows内核的。 正确答案是:“错”。

所谓\"*.9.png\"这是Android里所支持的一种特殊的图片格式,用它可以实现不失真拉伸。 正确答案是:“对”。

Activity的启动模式分为standard、singleTop、singleTask、singleInstance4种。 正确答案是:“对”。 教学实践1

Android的五种传统布局分别为什么?

• LinearLayout(线性布局) • RelativeLayout(相对布局) • FrameLayout(帧布局)

• AbsoluteLayout(绝对布局) • TableLayout(表格布局)

其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)

使用zxing完成扫描二维码的初始化、扫描、结果提示功能,实现主要代码即可。 导入项目 @Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

//初始化 CameraManager

CameraManager.init(getApplication());

viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view); txtResult = (TextView) findViewById(R.id.txtResult); hasSurface = false;

inactivityTimer = new InactivityTimer(this); }

打开Eclipse 导入 源码中的 Android 项目,然后右击项目 选择“Build path”——》\"Add External Archives\" 把核心库 core.jar文件加入到项目中。

此时编译一下项目,会发现报错,“ Multiple substitutions specified in non-positional format; did you mean to add the formatted=\"false\" attribute? ”之类的。打开raw 下的Values 发现错误是在一个上。这里把 “preferences_custom_product_search_summary ” 里的 %s %f 全部都改成 %1$s %1$f(因为我们用不到多国语言,建议只保留默认的Value ,其他全部删除)。

原因:由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android最新的开发文档的描述String的部分,已经说明如何去设置 %s 等符号

“If you need to format your strings using String.format(String, Object...) , then you can do so by putting your format arguments in the string resource. For example, with the following resource:

Hello, %1$s! You have %2$d new messages.

In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal number. You can format the string with arguements from your application...“ 经过以上步骤后项目应该就可以运行了。

但是ZXing的android项目东西太多了,有很多是我们不需要的,得新建另一个项目简化它。 简化

在开始前大致介绍一下简化ZXing需要用到各个包 、类的职责。

• CaptureActivity。这个是启动Activity 也就是扫描器(如果是第一安装,它还会跳转到帮助界面)。 • CaptureActivityHandler 解码处理类,负责调用另外的线程进行解码。 • DecodeThread 解码的线程。

• com.google.zxing.client.android.camera 包,摄像头控制包。

ViewfinderView 自定义的View,就是我们看见的拍摄时中间的框框了。

新建另一个项目

新建另一个项目将启动的Activity命名为CaptureActivity,并导入核心库。项目新建完成后我们打开 CaptureActivity 的布局文件,我这里为main。把里面的XML修改为: android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:layout_centerInParent=\"true\" />

android:id=\"@+id/viewfinder_view\" android:layout_width=\"fill_parent\"

android:layout_height=\"fill_parent\" android:background=\"@android:color/transparent\" /> android:layout_height=\"wrap_content\" android:text=\"@string/hello\" />

可以看到在XML里面用到了 ViewfinderView 自定义view 。所以新建一个View 的包,然后把:ViewfinderView 和 ViewfinderResultPointCallback 靠到里面(记得对应修改XML里面的包)。 打开 CaptureActivity 覆盖 onCreate 方法:

这里调用到的 CameraManager 类是控制摄像头的包里的类。新建一个camera包把:com.google.zxing.client.android.camera 里面的类全部拷入,另外我把PlanarYUVLuminanceSource也拷入到这个包里面。根据错误的提示来修正代码,主要是修改正包结构。(整 个简化的流程都是如此:“根据错误提示,修改代码 ”)。

在修改的过程中,有很多是关于R 资源的问题,在此我们需要将Values 里面的两个xml资源文件拷入项目中:colos.xml 和ids.xml 。 ctrl+b 一下看看error 是不是少了很多。在CameraManager中有些地方需要用到项目的配置,这里需要把配置直接写入代码中:

/ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

//是否使用前灯

// if (prefs.getBoolean(PreferencesActivity.KEY_FRONT_LIGHT, false)) { // FlashlightManager.enableFlashlight(); // }

FlashlightManager.enableFlashlight();

使用摄像头需要加入相应的权限: android:name=\"android.permission.FLASHLIGHT\"/>

当View 和 camera 包里的错误修正完成后,我们继续来看CaptureActivity。 覆盖onResume方法初始化摄像头:

@Override

protected void onResume() { super.onResume();

SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view); SurfaceHolder surfaceHolder = surfaceView.getHolder(); if (hasSurface) {

initCamera(surfaceHolder); } else {

surfaceHolder.addCallback(this);

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }

decodeFormats = null; characterSet = null; playBeep = true;

AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE); if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) { playBeep = false; }

initBeepSound(); vibrate = true; }

initCamera

private void initCamera(SurfaceHolder surfaceHolder) { try {

CameraManager.get().openDriver(surfaceHolder); } catch (IOException ioe) { return;

} catch (RuntimeException e) { return; }

if (handler == null) {

handler = new CaptureActivityHandler(this, decodeFormats, characterSet); } }

SurfaceHolder接口实现

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) { }

@Override

public void surfaceCreated(SurfaceHolder holder) { if (!hasSurface) {

hasSurface = true; initCamera(holder); } }

@Override

public void surfaceDestroyed(SurfaceHolder holder) { hasSurface = false; }

initCamera () 方法用于初始化摄像头,如果排除了所有的error ,运行项目时就可以看到大致扫描界面了。 surfaceHolder.addCallback( this );表示让CaptureActivity实现其callback接口。

handler = new CaptureActivityHandler(this, decodeFormats, characterSet) 用于进行扫描解码处理。 解码

上面的步骤主要都是用于对摄像头的控制,而解码的真正工作入口是在CaptureActivityHandler 里面的。新建一个Decoding包把以下文件拷入包中:

• CaptureActivityHandler • DecodeFormatManager • DecodeHandler • DecodeThread • FinishListener • InactivityTimer

• Intents http://www.my400800.cn

由于我们的包结构和Zxing 项目的有所不同所以需要注意一下类的可访问性 同样开始ctrl+B 编译一下,然后开始修正错误。

在CaptureActivityHandler 里 把 handleMessage 里的部分方法先注释掉如:“decode_succeeded ”分支,这是解码成功时调用 CaptureActivity 展示解码的结果。

在DecodeThread 类里,修改部分涉及Preference配置的代码: DecodeThread(CaptureActivity activity,

Vector decodeFormats, String characterSet,

ResultPointCallback resultPointCallback) { this.activity = activity;

handlerInitLatch = new CountDownLatch(1);

hints = new Hashtable(3);

// // The prefs can't change while the thread is running, so pick them up once here. // if (decodeFormats == null || decodeFormats.isEmpty()) {

// SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); // decodeFormats = new Vector();

// if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_1D, true)) { // decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS); // }

// if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_QR, true)) {

// decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); // }

// if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_DATA_MATRIX, true)) { // decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); // } // }

if (decodeFormats == null || decodeFormats.isEmpty()) { decodeFormats = new Vector();

decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS); decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); }

hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); if (characterSet != null) {

hints.put(DecodeHintType.CHARACTER_SET, characterSet); }

hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback); }

阶段性测试

关于Android系统的优势,不正确的是( )。 正确答案是:与运营商捆绑

下面关于Linux内核描述错误的是( )。

正确答案是:由于Linux内核全部使用Java语言编写,故Android的Linux内核层也全部是用Java语言编写的 在Android平台架中,浏览器位于( )。 正确答案是:应用层 下列说法正确的是( )。

正确答案是:每个进程都运行于自己的 java 虚拟机(VM)中 Android( )版本使用一种新的 Material Design 设计语言。 正确答案是:Android 5.0

截至2015.8占有率最多的版本是( )。 正确答案是:Android 4.X

Android Studio是基于哪个Java集成开发环境?( ) 正确答案是:IntelliJ IDEA

截至2015年12月,Google官方推荐的开发工具是( )。 正确答案是:Android Studio

使用Android Studio创建项目时,关于“Company Domain”说法正确的是( )。 正确答案是:公司域名

使用Android Studio创建项目时,关于“Package name”说法不正确的是( )。 正确答案是:默认与“Company Domain”有关,不可以单独设置 Package name 使用Android Studio创建项目时,“Minimum SDK”的意思是( )。 正确答案是:最低支持的Android API版本 使用Android Studio创建项目时,“Layout Name” 的意思是( )。 正确答案是:布局文件的名称

如果发现 UI 布局在手机上出现问题,可以用 sdk 中的( )工具查看。 正确答案是:TraceView

想把手机上的文件拷贝到电脑上,应当使用哪个命令?( ) 正确答案是:adb pull

Android开发中常用的开发与调试工具有很多,下面相关描述不对的是( )。

正确答案是:Android Debug Bridge,简称adb,它只是一个能用来调试Android应用程序的工具

DDMS 中 Log 信息分为( )个级别。 正确答案是:5

以下关于Android 的日志输出,( )是输出警告消息。 正确答案是:Log.w()

以下关于Android 的日志输出,调试消息的颜色是( )。 正确答案是:蓝色

对于“src/main/res/layout”目录,以下正确的是( )。 正确答案是:用来保存与用户界面相关的布局文件 在Android应用程序中,图片应放在( )目录下。 正确答案是:drawable

Android 项目工程下面的 assets 目录的作用是( )。

正确答案是:主要放置一些文件资源,这些文件会被原封不动打包到 apk 里面 下面选项中,( )是Android的四大组件之一。 正确答案是:Activity

Activity全生命周期中,第一个需要执行的方法是( )。 正确答案是:onCreate()

退出 activity 对一些资源以及状态的操作保存,可以在生命周期的哪个方法中进行?( ) 正确答案是:onPause()

以下关于移动互联网的说法正确的是( )。 正确答案是:移动互联网是PC互联网的别称 AndroidManifest文件的扩展名是apk。 正确答案是:“错”。

O2O即Online To Offline(在线离线/线上到线下),是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台。

正确答案是:“对”。

Activity是为用户操作而展示的可视化用户界面。 正确答案是:“对”。

一个应用程序可以有若干个Activity。 正确答案是:“对”。

以下关于Android 的日志输出,Log.i()是输出普通消息。 正确答案是:“对”。

以下关于Android 的日志输出,Log.w()是输出调试信息。 正确答案是:“错”。

以下关于Android 的日志输出,警告消息的颜色是绿色。 正确答案是:“错”。

以下关于Android 的日志输出,错误消息的颜色是橙色。 正确答案是:“错”。

可以通过设置android:theme=\"@android:style/Theme.Dialog\",使Activity显示为对话框模式。 正确答案是:“对”。

可视生命周期是Activity在界面上从可见到不可见的过程。 正确答案是:“对”。

在Android平台架构中,底层是基于Windows内核的。 正确答案是:“错”。

所谓\"*.9.png\"这是Android里所支持的一种特殊的图片格式,用它可以实现不失真拉伸。 正确答案是:“对”。

Activity中,setContentView必须要放在findViewById之前。 正确答案是:“对”。

Activity可以表现为一个悬浮窗体。 正确答案是:“对”。

Activity可以通过一个别名去访问。 正确答案是:“错”。

使用Android Studio创建一个项目后,Android Studio会自动创建相应的项目结构。 正确答案是:“对”。

使用Intent启动一个Activity分为隐式Intent和显式Intent。 正确答案是:“对”。

使用新的“holographic”主题的活动包含Action Bar。 正确答案是:“对”。

切取多套图片适配不同的分辨率会导致应用的APK非常大。 正确答案是:“对”。

发送通知需要通过NotificationManager.notify()来实现。 正确答案是:“对”。

可以通过继承ImageView自定义RoundImageView。 正确答案是:“对”。

可以通过重写Button来动态实现一些效果。 正确答案是:“对”。 密度无关像素。 正确答案是:“对”。

帧布局没有任何定位方式。 正确答案是:“对”。

我们在写Android项目时可以直接使用Android提供的控件。 正确答案是:“对”。 教学实践2

Android的五种传统布局分别为什么?

• LinearLayout(线性布局) • RelativeLayout(相对布局) • FrameLayout(帧布局)

• AbsoluteLayout(绝对布局) • TableLayout(表格布局)

其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)

编写activity_main.xml,实现底部菜单,并且底部菜单可以滑动切换。 1、ViewPager实现滑动切换页面

• ViewPager布局文件要求,也可以说这是在主布局界面(activity_main.xml)给ViewPager申请空间位置: ....

android:layout_width=\"match_parent\" android:layout_height=\"0dp\"

android:layout_above=\"@+id/bottom_tab_layout\"> ....

• 1 • 2 • 3 • 4 • 5 • 6

7 • 8 • 9

• 自定义适配器(adapter)类,新建CustomViewPagerAdapter.java文件 package com.sylanty.syvideo;

import android.support.v4.view.PagerAdapter; import android.view.View;

import android.view.ViewGroup; import java.util.List;

public class CustomViewPagerAdapter extends PagerAdapter { List pages;

public CustomViewPagerAdapter(List pages){ this.pages = pages; };

//获取页面数量 @Override

public int getCount() { return pages.size(); }

//判断类型是否匹配 @Override

public boolean isViewFromObject(View view, Object object) { return object==view; }

//加载page @Override

public Object instantiateItem(ViewGroup container, int position) { View view = pages.get(position); container.addView(view); return view; }

//移除page @Override

public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(pages.get(position)); } }

• 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12

• • • • • • • • • • • • • • • • • • • • • • • • • • • • 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

在MainActivity类文件,MainActivity.java中调用ViewPager

.... //MainActivity起始函数

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); initPages();

//初始化自定义适配器

customViewPagerAdapter = new CustomViewPagerAdapter(pages); //设置adapter

viewPager.setAdapter(customViewPagerAdapter); viewPager.setOnPageChangeListener(this); } ....

• 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8

• • • • • 9 10 11 12 13

....

// 初始化viewpager页面 private void initPages() {

pages = new ArrayList();

View homepage = View.inflate(MainActivity.this,R.layout.home_viewpager,null); View mepage = View.inflate(MainActivity.this,R.layout.me_viewpager,null); pages.add(homepage); pages.add(mepage); } ....

• 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 .... //继承自ViewPager.OnPageChangeListener接口 //实现页面滑动的事件监听 @Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

//继承自ViewPager.OnPageChangeListener接口 //实现页面选中后的事件监听 @Override

public void onPageSelected(int position) { resumeTab(); switch (position){ case 0:

homeImage.setImageResource(R.drawable.home_blue);

homeText.setTextColor(getResources().getColor(R.color.colorTextBlue)); toolbartitle.setText(R.string.app_home); break; case 1:

meImage.setImageResource(R.drawable.me_blue);

meText.setTextColor(getResources().getColor(R.color.colorTextBlue)); toolbartitle.setText(R.string.app_me); break; default: break;

} }

@Override

public void onPageScrollStateChanged(int state) { } .... 教学实践3

Android的五种传统布局分别为什么?

• LinearLayout(线性布局) • RelativeLayout(相对布局) • FrameLayout(帧布局)

• AbsoluteLayout(绝对布局) • TableLayout(表格布局)

其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)

编写style.xml实现一个矩形,矩形为圆角、渐变色.

android:angle=\"0\"

android:endColor=\"#FFDC9E \" android:startColor=\"#D9983B\" android:type=\"linear\" />

颜色从左往右渐变,逐渐变浅。(angle=0) 教学实践4

Android的五种传统布局分别为什么? LinearLayout(线性布局) RelativeLayout(相对布局) FrameLayout(帧布局)

AbsoluteLayout(绝对布局) TableLayout(表格布局)

其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)

编写strings.xml实现中文和英文两种字符串资源。

语言切换

这是标题 设置

语言切换

请选择你要切换的语言 中文 英文 设置成中文 设置成英文

<-----------------------分割线------------------------------->

languageMore

title

settings

language switch

choose your language,please Chinese English

has change to English has change to Chinese

作业

简述项目工程中res目录下文件夹的含义

Android 项目中文件夹作用(res文件夹详细介绍)

1. src:存放所有的*.Java源程序。

2. gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID。 3. assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。 4. res:可以存放项目中所有的资源文件,例如:图片(*.png、*.jpg)、文本等。

5. res/drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。 6. res/drawable-ldpi:保存低分辩率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。 7.res/drawable-mdpi:保存中等分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。 8.res/layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置。 9.res/values: 存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称: · arrays.xml:定义数组数据;(在个这个xml命名的时候可以随便起名,因为最后用的时候只是用到写在这个xml文件中的array的名字)

比如在arrays.xml里:

[html] view plain copy

1. 2. Reboot 3. Recovery 4. BootLoader 5. 6.

7. 在代码里获取:

8. String item0 =this.getResources().getStringArray(R.array.reboot_item)[0]; 9. String item1 = this.getResources().getStringArray(R.array.reboot_item)[1];

10. CharSequence[] items = this.getResources().getStringArray(R.array.reboot_item);

· dimens.xml:定义尺度,可以使用Resources.getDimension()获得这些资源;有时候我们为了维护一个工程,或者想定义一个button样式,或textView样式,这些样式中包含着文字的大小,背景图片,前置图片等一些资源。而且这个button或textView会在很多地方要用到它,原本我们可以将它的文字大小,图片样式等写在XML中或者代码中。

但这样的维护性太差了;一旦要修改的时候,需要挨个文件找,挨个修改。现在我们利用dimens来维护时,只需要修改对应的dimens里定义的值。所有引用它的地方都会自动的修改这样,我们就达到了维护的目的;将要定义的属性写在dimens.xml中,以达到资源重复利用;

[html] view plain copy

1. 2.

3. 80dp 设置图片时用dp

4. 22sp 设置字体大小时用sp 5.

6. 100dp 7. 100dp 8. 备注:在xml中调用时直接android:layout_height=\"@dimen/main_tab_h\"调用为其设置大小 在activity中设置时用context.getResource().getDimensource(r.dimen.main_tab_h);即可为其动态设置大小。

· strings.xml:定义字符串,可以使用Resources.getString()或Resources.getText()方法获得这些资源; · styles.xml:定义显示的样式文件;(如下代码,在调用时用@style/TextView即可) [html] view plain copy

1. 2. 5. attrs.xml:(在自定义一个控件的时候,如果定义一些新的属性的时候,会用到这个文件来设置)当中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context,attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。

ids.xml:为应用的相关资源提供唯一的资源id。id是为了获得xml中的对象而需要的参数,也就是Object=findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到。 若在ids.xml中定义了ID,则在layout中可如下定义@id/price_edit,否则@+id/price_edit。 使用ids.xml的原因 (1)优化编译效率。 我们知道android的组件必须用一个int类型的id属性来标识其唯一性,id属性必须以@开头的值,例如,@id/abc、@+id/xyz等。 如果使用\"@+id/name\"形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识。如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值(不会重复)。 当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如,@+id/xyz会在R.java文件中生成intxyz =value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。 使用@id/name形式,预先定义的id已经生成,修改配置文件时,也不会引起系统重新生成。 (2)统一管理资源Id。

public.xml——描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。

当我们对public.xml做了改动后,执行makeupdate-api命令,相应的current.xml就会添加这些改动。

在public.xml中资源数据的定义会影响到current.xml文件,它们分别在frameworks/asecoreesesvalues和framework/aseapicurrent.xml中。

当进行内核文件修改时,需要特别注意public.xml文件的同步,该文档定义了资源文件的二进制兼容性。因此需要小心对待该文件,否则可能会破坏该版本的向后兼容性。

为了避免破坏兼容性,新的资源需加在同类资源的最后(主要ID值,按照ID值递增)。若是放置在中间会导致随后的同类资源被赋予新的ID值从而破坏兼容性。 添加id的方法:

1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。 2)在ids.xml中添加公共id项,每一项前面加一行的注释,这样就不用在public.xml中添加相应的项了。源码中是的形式,这样current中就不会有相应的段了。

3)在自己写的xml中,使用android:id =“@+id/id_name”的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。 · colors.xml:定义表示颜色的数据; [html] view plain copy

1.

2.

3. #b89766

4. #FFFFFF 5. #000000 6.

10.res/raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式。存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID 也可以用,即R.raw.somefilename,Resources.getRawResource()方法可以获得这些资源。

11. res/xml:用户自定义的XML文件,所有的文件在程序运行时编译到应用程序之中,在程序运行时可以使用Resources.getXML()方法获取。 12. res/anim:用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frame by frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放) 13.res/animator:存放定义了property animations(android 3.0新定义的动画框架)的XML文件 14.res/color/:存放定义了颜色状态列表资源(Color State List Resource)的XML文件

15.res/menu/:存放定义了应用程序菜单资源的XML文件。正确创建文件的方法:new Folder,名字menu,new Other——Android——XML,选择menu类型,填写名称,确定即可。菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用

标签作为根节点。除了标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是。 简述设置自定义组合控件的一般步骤

步骤一:新建一个相对布局的文件update_item.xml

xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"fill_parent\"

android:layout_height=\"wrap_content\">

android:id=\"@+id/tv_isUpdate\"

android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:textSize=\"30sp\"

android:textColor=\"#000000\" android:layout_marginTop=\"5dp\" android:layout_marginLeft=\"10dp\"

android:text=\"@string/tv_isUpdate_text\"/> android:id=\"@+id/tv_isUpdate_state\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:layout_below=\"@id/tv_isUpdate\" android:textSize=\"25sp\"

android:textColor=\"#808080\" android:layout_marginTop=\"5dp\" android:layout_marginLeft=\"10dp\"

android:text=\"@string/tv_isUpdate_state_text\"/>

android:id=\"@+id/ck_checkbox\" android:clickable=\"false\" android:focusable=\"false\"

android:layout_alignParentRight=\"true\" android:layout_marginRight=\"20dp\" android:layout_centerVertical=\"true\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" /> android:id=\"@+id/view_line\"

android:layout_below=\"@id/tv_isUpdate_state\" android:layout_width=\"fill_parent\" android:layout_marginTop=\"5dp\" android:layout_marginLeft=\"10dp\" android:layout_marginRight=\"10dp\" android:layout_height=\"1dp\"

android:background=\"#808080\"/>

步骤二:新建一个类CustomRelativeLayoutView继承RelativeLayout,在CustomRelativeLayoutView的构造方法中,将刚才自定义的MyRelative.xml文件填充到我自定的MyRelativeView中,View.inflate(context,MyRelative.xml的id,MyRelativeView填充目标);这个方法第三个参数就是填充目标; 这样我定义的xml布局文件就填充到我定义的类中了,我这个类就是我定义的xml文件的样式。假如在组合控件中有一个CheckBox,想实现点击组合控件的任意位置都可以实现选中和取消CheckBox的方法: 思路将CheckBox与这个组合控件整体实现同生共死:在MyRelativeView.java中写一个boolean isChecked();和void setChecked()方法,方法体都是CheckBox的isChecked()方法和setChecked()方法。然后给这个组合控件一个单机事件实现

public class CustomRelativeLayoutView extends RelativeLayout { private CheckBox ck_checkBox; private TextView is_update_state;

private void initView(Context context) {

View.inflate(context, R.layout.update_item, CustomRelativeLayoutView.this); ck_checkBox = (CheckBox) this.findViewById(R.id.ck_checkbox);

is_update_state = (TextView) this.findViewById(R.id.tv_isUpdate_state); }

public CustomRelativeLayoutView(Context context) { super(context); initView(context); }

public CustomRelativeLayoutView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); }

public CustomRelativeLayoutView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); }

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

public CustomRelativeLayoutView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initView(context); } /**

* 将checkBox的选中与否的状态赋予当前自定义控件, * 使当前控件与checkbox看成一个整体 */

public boolean isChecked(){

return ck_checkBox.isChecked(); } /**

* 给当前控件设置是否选中状态,其实就是给CheckBox设置是否选中状态。 * @param boo */

public void setChecked(boolean boo) { ck_checkBox.setChecked(boo); } /**

* 是否启用更新的结果 * @param text */

public void setIsUpdateState(String text){ is_update_state.setText(text); } }

步骤三:要在某个布局文件中引用我自定的布局文件,就可以引用CustomRelativeLayoutView.java的全类名就行了,可以在指定一下宽高;也就是说此时这个全类名的控件就可以被看成普通的控件来操作了,例如定义一个id,再在

activity中findViewById()等等 试试,在xml布局文件中引用自定义控件时,执行了自定义控件的哪个构造方法,其实是一般执行两个参数的构造方法 xmlns:android=\"http://schemas.android.com/apk/res/android\" android:orientation=\"vertical\"

android:layout_width=\"match_parent\" android:layout_height=\"match_parent\"> android:layout_width=\"fill_parent\" android:layout_height=\"60dp\" android:gravity=\"center\" android:textSize=\"30sp\"

android:background=\"#A52A2A\"

android:text=\"@string/tv_setting_text\"/>

android:layout_height=\"wrap_content\" />

步骤四:Activity中的单击事件

public class CustomRelativeLayoutActivity extends FragmentActivity implements View.OnClickListener{ private CustomRelativeLayoutView custom_relative; @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_customrelativelayout);

custom_relative = (CustomRelativeLayoutView) findViewById(R.id.custom_relative); custom_relative.setOnClickListener(this); }

@Override

public void onClick(View v) { switch (v.getId()){

case R.id.custom_relative:

if(custom_relative.isChecked()){

custom_relative.setChecked(false);

custom_relative.setIsUpdateState(\"自动更新已关闭\"); }else{

custom_relative.setChecked(true);

custom_relative.setIsUpdateState(\"自动更新已开启\"); }

break; default: break; } } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- banwoyixia.com 版权所有 湘ICP备2023022004号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务