在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 发现错误是在一个 原因:由于新的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: 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_height=\"fill_parent\" android:background=\"@android:color/transparent\" /> • 可以看到在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(); 使用摄像头需要加入相应的权限: 当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 ResultPointCallback resultPointCallback) { this.activity = activity; handlerInitLatch = new CountDownLatch(1); hints = new Hashtable // // 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_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 public CustomViewPagerAdapter(List • //获取页面数量 @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:endColor=\"#FFDC9E \" android:startColor=\"#D9983B\" android:type=\"linear\" /> Android的五种传统布局分别为什么? LinearLayout(线性布局) RelativeLayout(相对布局) FrameLayout(帧布局) AbsoluteLayout(绝对布局) TableLayout(表格布局) 其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求) 编写strings.xml实现中文和英文两种字符串资源。 <-----------------------分割线-------------------------------> 作业 简述项目工程中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. 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. 4. 6. · strings.xml:定义字符串,可以使用Resources.getString()或Resources.getText()方法获得这些资源; · styles.xml:定义显示的样式文件;(如下代码,在调用时用@style/TextView即可) [html] view plain copy 1. 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. 4. 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目录中。菜单资源文件必须使用
Copyright © 2019- banwoyixia.com 版权所有 湘ICP备2023022004号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务