练习题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(表格布局) 导入项目 public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); CameraManager.init(getApplication()); viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view); hasSurface = false; } 打开Eclipse 导入 源码中的 Android 项目,然后右击项目 选择“Build path”——》”Add External Archives” 把核心库 core.jar文件加入到项目中。 原因:由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android最新的开发文档的描述String的部分,已经说明如何去设置 %s 等符号 <string name=”welcome_messages”>Hello, %1$s! You have %2$d new messages.</string> 经过以上步骤后项目应该就可以运行了。简化
- 在开始前大致介绍一下简化ZXing需要用到各个包 、类的职责。
- 但是ZXing的android项目东西太多了,有很多是我们不需要的,得新建另一个项目简化它。
- 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…“
- “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:
- 此时编译一下项目,会发现报错,“ Multiple substitutions specified in non-positional format; did you mean to add the formatted=”false” attribute? ”之类的。打开raw 下的Values 发现错误是在一个<String>上。这里把 “preferences_custom_product_search_summary ” 里的 %s %f 全部都改成 %1$s %1$f(因为我们用不到多国语言,建议只保留默认的Value ,其他全部删除)。
- inactivityTimer = new InactivityTimer(this);
- txtResult = (TextView) findViewById(R.id.txtResult);
- //初始化 CameraManager
- super.onCreate(savedInstanceState);
- @Override
- 使用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_width=”fill_parent” android:layout_height=”fill_parent” android:id=”@+id/viewfinder_view” android:layout_width=”fill_parent” <TextView android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”@string/hello” /> </FrameLayout> 打开 CaptureActivity 覆盖 onCreate 方法: 这里调用到的 CameraManager 类是控制摄像头的包里的类。新建一个camera包把:com.google.zxing.client.android.camera 里面的类全部拷入,另外我把PlanarYUVLuminanceSource也拷入到这个包里面。根据错误的提示来修正代码,主要是修改正包结构。(整 个简化的流程都是如此:“根据错误提示,修改代码 ”)。 在修改的过程中,有很多是关于R 资源的问题,在此我们需要将Values 里面的两个xml资源文件拷入项目中:colos.xml 和ids.xml 。 ctrl+b 一下看看error 是不是少了很多。在CameraManager中有些地方需要用到项目的配置,这里需要把配置直接写入代码中: //是否使用前灯// FlashlightManager.enableFlashlight(); FlashlightManager.enableFlashlight(); <uses-permission android:name=”android.permission.CAMERA”></uses-permission> <uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”></uses-permission> <uses-feature android:name=”android.hardware.camera” /> <uses-feature android:name=”android.hardware.camera.autofocus” /> <uses-permission android:name=”android.permission.VIBRATE”/> <uses-permission android:name=”android.permission.FLASHLIGHT”/>当View 和 camera 包里的错误修正完成后,我们继续来看CaptureActivity。 protected void onResume() { SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view); if (hasSurface) { } else { surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); decodeFormats = null; AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE); playBeep = false; initBeepSound(); }initCamera try { } catch (IOException ioe) { } catch (RuntimeException e) { } handler = new CaptureActivityHandler(this, decodeFormats, } SurfaceHolder接口实现 public void surfaceChanged(SurfaceHolder holder, int format, int width, public void surfaceCreated(SurfaceHolder holder) { hasSurface = true; } } @Override hasSurface = false; }initCamera () 方法用于初始化摄像头,如果排除了所有的error ,运行项目时就可以看到大致扫描界面了。 surfaceHolder.addCallback( this );表示让CaptureActivity实现其callback接口。解码
- 上面的步骤主要都是用于对摄像头的控制,而解码的真正工作入口是在CaptureActivityHandler 里面的。新建一个Decoding包把以下文件拷入包中:
- handler = new CaptureActivityHandler(this, decodeFormats, characterSet) 用于进行扫描解码处理。
- public void surfaceDestroyed(SurfaceHolder holder) {
- initCamera(holder);
- if (!hasSurface) {
- @Override
- }
- int height) {
- @Override
- }
- characterSet);
- if (handler == null) {
- return;
- return;
- CameraManager.get().openDriver(surfaceHolder);
- private void initCamera(SurfaceHolder surfaceHolder) {
- vibrate = true;
- }
- if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
- playBeep = true;
- characterSet = null;
- }
- surfaceHolder.addCallback(this);
- initCamera(surfaceHolder);
- SurfaceHolder surfaceHolder = surfaceView.getHolder();
- super.onResume();
- @Override
- 覆盖onResume方法初始化摄像头:
- 使用摄像头需要加入相应的权限:
- // }
- // if (prefs.getBoolean(PreferencesActivity.KEY_FRONT_LIGHT, false)) {
- / SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- 可以看到在XML里面用到了 ViewfinderView 自定义view 。所以新建一个View 的包,然后把:ViewfinderView 和 ViewfinderResultPointCallback 靠到里面(记得对应修改XML里面的包)。
- android:id=”@+id/txtResult”
- android:layout_height=”fill_parent” android:background=”@android:color/transparent” />
- <com.Zxing.Demo.view.ViewfinderView
- android:layout_centerInParent=”true” />
- <SurfaceView android:id=”@+id/preview_view”
- <FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android”
- 新建另一个项目
- CaptureActivityHandler
- DecodeFormatManager
- DecodeHandler
- DecodeThread
- FinishListener
- InactivityTimer
- Intents http://www.my400800.cn同样开始ctrl+B 编译一下,然后开始修正错误。在DecodeThread 类里,修改部分涉及Preference配置的代码: Vector<BarcodeFormat> decodeFormats, ResultPointCallback resultPointCallback) { this.activity = activity; // if (decodeFormats == null || decodeFormats.isEmpty()) {// decodeFormats = new Vector<BarcodeFormat>();// decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS);// if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_QR, true)) {// }// decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);// } decodeFormats = new Vector<BarcodeFormat>(); decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); hints.put(DecodeHintType.CHARACTER_SET, characterSet); } 关于Android系统的优势,不正确的是( )。下面关于Linux内核描述错误的是( )。在Android平台架中,浏览器位于( )。下列说法正确的是( )。Android( )版本使用一种新的 Material Design 设计语言。截至2015.8占有率最多的版本是( )。Android Studio是基于哪个Java集成开发环境?( )正确答案是:IntelliJ IDEA正确答案是:Android Studio正确答案是:公司域名正确答案是:默认与“Company Domain”有关,不可以单独设置 Package name正确答案是:最低支持的Android API版本正确答案是:布局文件的名称正确答案是:TraceView正确答案是:adb pull正确答案是:Android Debug Bridge,简称adb,它只是一个能用来调试Android应用程序的工具正确答案是:5正确答案是:Log.w()正确答案是:蓝色正确答案是:用来保存与用户界面相关的布局文件正确答案是:drawable正确答案是:主要放置一些文件资源,这些文件会被原封不动打包到 apk 里面正确答案是:Activity正确答案是:onCreate()正确答案是:onPause()正确答案是:移动互联网是PC互联网的别称正确答案是:“错”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“错”。正确答案是:“错”。正确答案是:“错”。正确答案是:“对”。正确答案是:“对”。正确答案是:“错”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“错”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。正确答案是:“对”。 Android的五种传统布局分别为什么?
- 教学实践2
- 我们在写Android项目时可以直接使用Android提供的控件。
- 帧布局没有任何定位方式。
- 密度无关像素。
- 可以通过重写Button来动态实现一些效果。
- 可以通过继承ImageView自定义RoundImageView。
- 发送通知需要通过NotificationManager.notify()来实现。
- 切取多套图片适配不同的分辨率会导致应用的APK非常大。
- 使用新的“holographic”主题的活动包含Action Bar。
- 使用Intent启动一个Activity分为隐式Intent和显式Intent。
- 使用Android Studio创建一个项目后,Android Studio会自动创建相应的项目结构。
- Activity可以通过一个别名去访问。
- Activity可以表现为一个悬浮窗体。
- Activity中,setContentView必须要放在findViewById之前。
- 所谓”*.9.png”这是Android里所支持的一种特殊的图片格式,用它可以实现不失真拉伸。
- 在Android平台架构中,底层是基于Windows内核的。
- 可视生命周期是Activity在界面上从可见到不可见的过程。
- 可以通过设置android:theme=”@android:style/Theme.Dialog”,使Activity显示为对话框模式。
- 以下关于Android 的日志输出,错误消息的颜色是橙色。
- 以下关于Android 的日志输出,警告消息的颜色是绿色。
- 以下关于Android 的日志输出,Log.w()是输出调试信息。
- 以下关于Android 的日志输出,Log.i()是输出普通消息。
- 一个应用程序可以有若干个Activity。
- Activity是为用户操作而展示的可视化用户界面。
- O2O即Online To Offline(在线离线/线上到线下),是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台。
- AndroidManifest文件的扩展名是apk。
- 以下关于移动互联网的说法正确的是( )。
- 退出 activity 对一些资源以及状态的操作保存,可以在生命周期的哪个方法中进行?( )
- Activity全生命周期中,第一个需要执行的方法是( )。
- 下面选项中,( )是Android的四大组件之一。
- Android 项目工程下面的 assets 目录的作用是( )。
- 在Android应用程序中,图片应放在( )目录下。
- 对于“src/main/res/layout”目录,以下正确的是( )。
- 以下关于Android 的日志输出,调试消息的颜色是( )。
- 以下关于Android 的日志输出,( )是输出警告消息。
- DDMS 中 Log 信息分为( )个级别。
- Android开发中常用的开发与调试工具有很多,下面相关描述不对的是( )。
- 想把手机上的文件拷贝到电脑上,应当使用哪个命令?( )
- 如果发现 UI 布局在手机上出现问题,可以用 sdk 中的( )工具查看。
- 使用Android Studio创建项目时,“Layout Name” 的意思是( )。
- 使用Android Studio创建项目时,“Minimum SDK”的意思是( )。
- 使用Android Studio创建项目时,关于“Package name”说法不正确的是( )。
- 使用Android Studio创建项目时,关于“Company Domain”说法正确的是( )。
- 截至2015年12月,Google官方推荐的开发工具是( )。
- 正确答案是:Android 4.X
- 正确答案是:Android 5.0
- 正确答案是:每个进程都运行于自己的 java 虚拟机(VM)中
- 正确答案是:应用层
- 正确答案是:由于Linux内核全部使用Java语言编写,故Android的Linux内核层也全部是用Java语言编写的
- 正确答案是:与运营商捆绑
- 阶段性测试
- hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback);
- }
- if (characterSet != null) {
- hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats);
- }
- decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);
- decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS);
- if (decodeFormats == null || decodeFormats.isEmpty()) {
- // }
- // if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_DATA_MATRIX, true)) {
- // decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS);
- // }
- // if (prefs.getBoolean(PreferencesActivity.KEY_DECODE_1D, true)) {
- // SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
- // // The prefs can’t change while the thread is running, so pick them up once here.
- hints = new Hashtable<DecodeHintType, Object>(3);
- handlerInitLatch = new CountDownLatch(1);
- String characterSet,
- DecodeThread(CaptureActivity activity,
- 在CaptureActivityHandler 里 把 handleMessage 里的部分方法先注释掉如:“decode_succeeded ”分支,这是解码成功时调用 CaptureActivity 展示解码的结果。
- 由于我们的包结构和Zxing 项目的有所不同所以需要注意一下类的可访问性
- LinearLayout(线性布局)
- RelativeLayout(相对布局)
- FrameLayout(帧布局)
- AbsoluteLayout(绝对布局)
- TableLayout(表格布局) 编写activity_main.xml,实现底部菜单,并且底部菜单可以滑动切换。1、ViewPager实现滑动切换页面
- 其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)
- ViewPager布局文件要求,也可以说这是在主布局界面(activity_main.xml)给ViewPager申请空间位置: <android.support.v4.view.ViewPager android:id=”@+id/viewpager” android:layout_height=”0dp” </android.support.v4.view.ViewPager>
- ….
- android:layout_above=”@+id/bottom_tab_layout”>
- android:layout_width=”match_parent”
- android:layout_weight=”1″
- ….
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 自定义适配器(adapter)类,新建CustomViewPagerAdapter.java文件 import android.view.View;import java.util.List;public class CustomViewPagerAdapter extends PagerAdapter { public CustomViewPagerAdapter(List<View> pages){ }; //获取页面数量 public int getCount() { } //判断类型是否匹配 public boolean isViewFromObject(View view, Object object) { } //加载page public Object instantiateItem(ViewGroup container, int position) { container.addView(view); } //移除page public void destroyItem(ViewGroup container, int position, Object object) { }
- }
- container.removeView(pages.get(position));
- @Override
- return view;
- View view = pages.get(position);
- @Override
- return object==view;
- @Override
- return pages.size();
- @Override
- this.pages = pages;
- List<View> pages;
- import android.view.ViewGroup;
- import android.support.v4.view.PagerAdapter;
- package com.sylanty.syvideo;
- 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起始函数 super.onCreate(savedInstanceState); initPages(); customViewPagerAdapter = new CustomViewPagerAdapter(pages); viewPager.setAdapter(customViewPagerAdapter); }
- ….
- viewPager.setOnPageChangeListener(this);
- //设置adapter
- //初始化自定义适配器
- setContentView(R.layout.main_activity);
- protected void onCreate(Bundle savedInstanceState) {
- ….
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13 // 初始化viewpager页面 pages = new ArrayList<View>(); View mepage = View.inflate(MainActivity.this,R.layout.me_viewpager,null); pages.add(mepage); ….
- }
- pages.add(homepage);
- View homepage = View.inflate(MainActivity.this,R.layout.home_viewpager,null);
- private void initPages() {
- ….
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10//继承自ViewPager.OnPageChangeListener接口 @Override //继承自ViewPager.OnPageChangeListener接口 @Override resumeTab(); case 0: homeText.setTextColor(getResources().getColor(R.color.colorTextBlue)); break; meImage.setImageResource(R.drawable.me_blue); toolbartitle.setText(R.string.app_me); default: } @Override ….教学实践3
- Android的五种传统布局分别为什么?
- }
- public void onPageScrollStateChanged(int state) {
- }
- break;
- break;
- meText.setTextColor(getResources().getColor(R.color.colorTextBlue));
- case 1:
- toolbartitle.setText(R.string.app_home);
- homeImage.setImageResource(R.drawable.home_blue);
- switch (position){
- public void onPageSelected(int position) {
- //实现页面选中后的事件监听
- }
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- //实现页面滑动的事件监听
- ….
- LinearLayout(线性布局)
- RelativeLayout(相对布局)
- FrameLayout(帧布局)
- AbsoluteLayout(绝对布局)
- TableLayout(表格布局) 编写style.xml实现一个矩形,矩形为圆角、渐变色.<shape xmlns:android=”http://schemas.android.com/apk/res/android” android:angle=”0″ android:startColor=”#D9983B”</shape>颜色从左往右渐变,逐渐变浅。(angle=0)教学实践4LinearLayout(线性布局)FrameLayout(帧布局)TableLayout(表格布局) <resources> <!–content–> <string name=”settings”>设置</string> <string name=”dialog_title”>语言切换</string> <string name=”dialog_positive”>中文</string> <string name=”toast_set_ch”>设置成中文</string></resources><———————–分割线——————————-><resources> <!–content–> <string name=”settings”>settings</string> <string name=”dialog_title”>language switch</string> <string name=”dialog_positive”>Chinese</string> <string name=”toast_set_en”>has change to English</string></resources> 简述项目工程中res目录下文件夹的含义 2. gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID。4. res:可以存放项目中所有的资源文件,例如:图片(*.png、*.jpg)、文本等。6. res/drawable-ldpi:保存低分辩率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。8.res/layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置。
- [html] view plain copy
- 比如在arrays.xml里:
- 9.res/values: 存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称: · arrays.xml:定义数组数据;(在个这个xml命名的时候可以随便起名,因为最后用的时候只是用到写在这个xml文件中的array的名字)
- 7.res/drawable-mdpi:保存中等分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。
- 5. res/drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。
- 3. assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。
- 1. src:存放所有的*.Java源程序。
- Android 项目中文件夹作用(res文件夹详细介绍)
- 作业
- <string name=”toast_set_ch”>has change to Chinese</string>
- <string name=”dialog_negative”>English</string>
- <string name=”dialog_msg”>choose your language,please</string>
- <!–dialog–>
- <string name=”title”>title</string>
- <string name=”app_name”>languageMore</string>
- <string name=”toast_set_en”>设置成英文</string>
- <string name=”dialog_negative”>英文</string>
- <string name=”dialog_msg”>请选择你要切换的语言</string>
- <!–dialog–>
- <string name=”title”>这是标题</string>
- <string name=”app_name”>语言切换</string>
- 编写strings.xml实现中文和英文两种字符串资源。
- 其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)
- AbsoluteLayout(绝对布局)
- RelativeLayout(相对布局)
- Android的五种传统布局分别为什么?
- android:type=”linear” />
- android:endColor=”#FFDC9E “
- <gradient
- <corners android:radius=”50dp” />
- android:shape=”rectangle”>
- <?xml version=”1.0″ encoding=”utf-8″?>
- 其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)
- <string-array name=”reboot_item”>
- <item>Reboot</item>
- <item>Recovery</item>
- <item>BootLoader</item>
- </string-array>
- 在代码里获取:
- String item0 =this.getResources().getStringArray(R.array.reboot_item)[0];
- String item1 = this.getResources().getStringArray(R.array.reboot_item)[1];
- CharSequence[] items = this.getResources().getStringArray(R.array.reboot_item); [html] view plain copy
- · dimens.xml:定义尺度,可以使用Resources.getDimension()获得这些资源;有时候我们为了维护一个工程,或者想定义一个button样式,或textView样式,这些样式中包含着文字的大小,背景图片,前置图片等一些资源。而且这个button或textView会在很多地方要用到它,原本我们可以将它的文字大小,图片样式等写在XML中或者代码中。但这样的维护性太差了;一旦要修改的时候,需要挨个文件找,挨个修改。现在我们利用dimens来维护时,只需要修改对应的dimens里定义的值。所有引用它的地方都会自动的修改这样,我们就达到了维护的目的;将要定义的属性写在dimens.xml中,以达到资源重复利用;
- <?xml version=”1.0″ encoding=”UTF-8″?>
- <resources>
- <dimen name=”main_tab_h”>80dp</dimen> 设置图片时用dp
- <dimen name=”main_tab_tsize”>22sp</dimen> 设置字体大小时用sp
- <dimen name=”set_userinfo_prow”>100dp</dimen>
- <dimen name=”set_cpwd_prow”>100dp</dimen>
- </resources> · strings.xml:定义字符串,可以使用Resources.getString()或Resources.getText()方法获得这些资源;[html] view plain copy
- · styles.xml:定义显示的样式文件;(如下代码,在调用时用@style/TextView即可)
- 备注:在xml中调用时直接android:layout_height=”@dimen/main_tab_h”调用为其设置大小 在activity中设置时用context.getResource().getDimensource(r.dimen.main_tab_h);即可为其动态设置大小。
- <resources xmlns:android=”http://schemas.android.com/apk/res/android”>
- <style name=”TextView”>
- <item name=”android:textColor”>@color/green</item>
- </style>
- </resources> 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做了改动后,执行makeupdate-api命令,相应的current.xml就会添加这些改动。当进行内核文件修改时,需要特别注意public.xml文件的同步,该文档定义了资源文件的二进制兼容性。因此需要小心对待该文件,否则可能会破坏该版本的向后兼容性。
为了避免破坏兼容性,新的资源需加在同类资源的最后(主要ID值,按照ID值递增)。若是放置在中间会导致随后的同类资源被赋予新的ID值从而破坏兼容性。1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。3)在自己写的xml中,使用android:id =“@+id/id_name”的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。[html] view plain copy - · colors.xml:定义表示颜色的数据;
- 2)在ids.xml中添加公共id项,每一项前面加一行<!– @hide–>的注释,这样就不用在public.xml中添加相应的项了。源码中是的形式,这样current中就不会有相应的段了。
- 添加id的方法:
- 在public.xml中资源数据的定义会影响到current.xml文件,它们分别在frameworks/asecoreesesvalues和framework/aseapicurrent.xml中。
- public.xml——描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。
- attrs.xml:(在自定义一个控件的时候,如果定义一些新的属性的时候,会用到这个文件来设置)当中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context,attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。
- <resources>
- <!– 定义几种常用的颜色 –>
- <color name=”gold”>#b89766</color>
- <color name=”white”>#FFFFFF</color><!– 白色 –>
- <color name=”black”>#000000</color><!– 黑色 –>
- </resources> 11. res/xml:用户自定义的XML文件,所有的文件在程序运行时编译到应用程序之中,在程序运行时可以使用Resources.getXML()方法获取。13.res/animator:存放定义了property animations(android 3.0新定义的动画框架)的XML文件15.res/menu/:存放定义了应用程序菜单资源的XML文件。正确创建文件的方法:new Folder,名字menu,new Other——Android——XML,选择menu类型,填写名称,确定即可。菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用<menu>标签作为根节点。除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。 步骤一:新建一个相对布局的文件update_item.xml<?xml version=”1.0″ encoding=”utf-8″?> xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_height=”wrap_content”> <TextView android:layout_width=”wrap_content” android:textSize=”30sp” android:layout_marginTop=”5dp” android:text=”@string/tv_isUpdate_text”/> android:id=”@+id/tv_isUpdate_state” android:layout_height=”wrap_content” android:textSize=”25sp” android:layout_marginTop=”5dp” android:text=”@string/tv_isUpdate_state_text”/> <!–在整个自定义控件中时最高的,因此放弃掉,而只是把CheckBox作为整个自定义控件的一个普通的部分看待,但是保留了勾选和非勾选的样式,为了–> <CheckBox android:clickable=”false” android:layout_alignParentRight=”true” android:layout_centerVertical=”true” android:layout_height=”wrap_content” /> android:id=”@+id/view_line” android:layout_width=”fill_parent” android:layout_marginLeft=”10dp” android:layout_height=”1dp” public class CustomRelativeLayoutView extends RelativeLayout { private CheckBox ck_checkBox; View.inflate(context, R.layout.update_item, CustomRelativeLayoutView.this); is_update_state = (TextView) this.findViewById(R.id.tv_isUpdate_state); public CustomRelativeLayoutView(Context context) { initView(context); super(context, attrs); } public CustomRelativeLayoutView(Context context, AttributeSet attrs, int defStyleAttr) { initView(context); public CustomRelativeLayoutView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { initView(context); * 将checkBox的选中与否的状态赋予当前自定义控件, */ return ck_checkBox.isChecked(); * 给当前控件设置是否选中状态,其实就是给CheckBox设置是否选中状态。 */ ck_checkBox.setChecked(boo); * 是否启用更新的结果 */ is_update_state.setText(text);}<?xml version=”1.0″ encoding=”utf-8″?> xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” <TextView android:layout_height=”60dp” android:textSize=”30sp” android:text=”@string/tv_setting_text”/> android:id=”@+id/custom_relative” android:layout_height=”wrap_content” />步骤四:Activity中的单击事件 protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_customrelativelayout); custom_relative.setOnClickListener(this); public void onClick(View v) { case R.id.custom_relative: custom_relative.setChecked(false); }else{ custom_relative.setIsUpdateState(“自动更新已开启”); break; break; }
- }
- }
- default:
- }
- custom_relative.setChecked(true);
- custom_relative.setIsUpdateState(“自动更新已关闭”);
- if(custom_relative.isChecked()){
- switch (v.getId()){
- @Override
- }
- custom_relative = (CustomRelativeLayoutView) findViewById(R.id.custom_relative);
- super.onCreate(savedInstanceState);
- @Override
- private CustomRelativeLayoutView custom_relative;
- public class CustomRelativeLayoutActivity extends FragmentActivity implements View.OnClickListener{
- </LinearLayout>
- android:layout_width=”fill_parent”
- <com.mycompany.mysimple.customrelativelayout.CustomRelativeLayoutView
- android:background=”#A52A2A”
- android:gravity=”center”
- android:layout_width=”fill_parent”
- android:layout_height=”match_parent”>
- android:orientation=”vertical”
- <LinearLayout
- 步骤三:要在某个布局文件中引用我自定的布局文件,就可以引用CustomRelativeLayoutView.java的全类名就行了,可以在指定一下宽高;也就是说此时这个全类名的控件就可以被看成普通的控件来操作了,例如定义一个id,再在activity中findViewById()等等 试试,在xml布局文件中引用自定义控件时,执行了自定义控件的哪个构造方法,其实是一般执行两个参数的构造方法
- }
- public void setIsUpdateState(String text){
- * @param text
- /**
- }
- public void setChecked(boolean boo) {
- * @param boo
- /**
- }
- public boolean isChecked(){
- * 使当前控件与checkbox看成一个整体
- /**
- }
- super(context, attrs, defStyleAttr, defStyleRes);
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- }
- super(context, attrs, defStyleAttr);
- initView(context);
- public CustomRelativeLayoutView(Context context, AttributeSet attrs) {
- }
- super(context);
- }
- ck_checkBox = (CheckBox) this.findViewById(R.id.ck_checkbox);
- private void initView(Context context) {
- private TextView is_update_state;
- 步骤二:新建一个类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()方法。然后给这个组合控件一个单机事件实现
- </RelativeLayout>
- android:background=”#808080″/>
- android:layout_marginRight=”10dp”
- android:layout_marginTop=”5dp”
- android:layout_below=”@id/tv_isUpdate_state”
- <View
- android:layout_width=”wrap_content”
- android:layout_marginRight=”20dp”
- android:focusable=”false”
- android:id=”@+id/ck_checkbox”
- <!–提示用户–>
- <!–将CheckBox的clickable属性和focusable的属性设为false的目的是放弃CheckBox自身的属性,因为CheckBox的获取焦点和可点击的优先级–>
- android:layout_marginLeft=”10dp”
- android:textColor=”#808080″
- android:layout_below=”@id/tv_isUpdate”
- android:layout_width=”wrap_content”
- <TextView
- android:layout_marginLeft=”10dp”
- android:textColor=”#000000″
- android:layout_height=”wrap_content”
- android:id=”@+id/tv_isUpdate”
- <!–该布局文件是一个自定义的控件,可看成是一个整体的控件,由多个控件组成–>
- android:layout_width=”fill_parent”
- <RelativeLayout
- 简述设置自定义组合控件的一般步骤
- 14.res/color/:存放定义了颜色状态列表资源(Color State List Resource)的XML文件
- 12. res/anim:用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frame by frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放)
- 10.res/raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式。存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID 也可以用,即R.raw.somefilename,Resources.getRawResource()方法可以获得这些资源。
请先
!