国开《Android核心开发技术》练习题

微信小程序
资源下载
下载价格15

练习题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″?>
  • 其中,最常用的布局是前三种,绝对布局用过一点,表格布局根本没用过(可能会很好用吧,但是前几种满足了我的日常需求)
  1. <string-array name=”reboot_item”>    
  2. <item>Reboot</item>    
  3. <item>Recovery</item>    
  4. <item>BootLoader</item>    
  5. </string-array>    
  6. 在代码里获取:
  7. String item0 =this.getResources().getStringArray(R.array.reboot_item)[0];
  8. String item1 = this.getResources().getStringArray(R.array.reboot_item)[1];
  9. CharSequence[] items = this.getResources().getStringArray(R.array.reboot_item);   [html] view plain copy
  10.  · dimens.xml:定义尺度,可以使用Resources.getDimension()获得这些资源;有时候我们为了维护一个工程,或者想定义一个button样式,或textView样式,这些样式中包含着文字的大小,背景图片,前置图片等一些资源。而且这个button或textView会在很多地方要用到它,原本我们可以将它的文字大小,图片样式等写在XML中或者代码中。但这样的维护性太差了;一旦要修改的时候,需要挨个文件找,挨个修改。现在我们利用dimens来维护时,只需要修改对应的dimens里定义的值。所有引用它的地方都会自动的修改这样,我们就达到了维护的目的;将要定义的属性写在dimens.xml中,以达到资源重复利用;
  1. <?xml version=”1.0″ encoding=”UTF-8″?>    
  2. <resources>    
  3.     <dimen name=”main_tab_h”>80dp</dimen> 设置图片时用dp    
  4.     <dimen name=”main_tab_tsize”>22sp</dimen> 设置字体大小时用sp    
  5.     <dimen name=”set_userinfo_prow”>100dp</dimen>    
  6.     <dimen name=”set_cpwd_prow”>100dp</dimen>    
  7. </resources>       · strings.xml:定义字符串,可以使用Resources.getString()或Resources.getText()方法获得这些资源;[html] view plain copy
  8.    · styles.xml:定义显示的样式文件;(如下代码,在调用时用@style/TextView即可)
  9. 备注:在xml中调用时直接android:layout_height=”@dimen/main_tab_h”调用为其设置大小              在activity中设置时用context.getResource().getDimensource(r.dimen.main_tab_h);即可为其动态设置大小。
  1. <resources xmlns:android=”http://schemas.android.com/apk/res/android”>  
  2.     <style name=”TextView”>  
  3.         <item name=”android:textColor”>@color/green</item>  
  4.     </style>  
  5. </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
  6.    · colors.xml:定义表示颜色的数据;
  7. 2)在ids.xml中添加公共id项,每一项前面加一行<!– @hide–>的注释,这样就不用在public.xml中添加相应的项了。源码中是的形式,这样current中就不会有相应的段了。
  8. 添加id的方法:
  9. 在public.xml中资源数据的定义会影响到current.xml文件,它们分别在frameworks/asecoreesesvalues和framework/aseapicurrent.xml中。
  10. public.xml——描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。
  11.     attrs.xml:(在自定义一个控件的时候,如果定义一些新的属性的时候,会用到这个文件来设置)当中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context,attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。
  1. <resources>  
  2.     <!– 定义几种常用的颜色 –>
  3.     <color name=”gold”>#b89766</color>  
  4.     <color name=”white”>#FFFFFF</color><!– 白色 –>  
  5.     <color name=”black”>#000000</color><!– 黑色 –>  
  6. </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;    }
  7. }
  8.         }
  9.             default:
  10.                 }
  11.                     custom_relative.setChecked(true);
  12.                     custom_relative.setIsUpdateState(“自动更新已关闭”);
  13.                 if(custom_relative.isChecked()){
  14.         switch (v.getId()){
  15.     @Override
  16.     }
  17.         custom_relative = (CustomRelativeLayoutView) findViewById(R.id.custom_relative);
  18.         super.onCreate(savedInstanceState);
  19.     @Override
  20.     private CustomRelativeLayoutView custom_relative;
  21. public class CustomRelativeLayoutActivity extends FragmentActivity implements View.OnClickListener{
  22. </LinearLayout>
  23.         android:layout_width=”fill_parent”
  24.     <com.mycompany.mysimple.customrelativelayout.CustomRelativeLayoutView
  25.         android:background=”#A52A2A”
  26.         android:gravity=”center”
  27.         android:layout_width=”fill_parent”
  28.     android:layout_height=”match_parent”>
  29.     android:orientation=”vertical”
  30. <LinearLayout
  31. 步骤三:要在某个布局文件中引用我自定的布局文件,就可以引用CustomRelativeLayoutView.java的全类名就行了,可以在指定一下宽高;也就是说此时这个全类名的控件就可以被看成普通的控件来操作了,例如定义一个id,再在activity中findViewById()等等 试试,在xml布局文件中引用自定义控件时,执行了自定义控件的哪个构造方法,其实是一般执行两个参数的构造方法
  32.     }
  33.     public void setIsUpdateState(String text){
  34.      * @param text
  35.     /**
  36.     }
  37.     public void setChecked(boolean boo) {
  38.      * @param boo
  39.     /**
  40.     }
  41.     public boolean isChecked(){
  42.      * 使当前控件与checkbox看成一个整体
  43.     /**
  44.     }
  45.         super(context, attrs, defStyleAttr, defStyleRes);
  46.     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  47.     }
  48.         super(context, attrs, defStyleAttr);
  49.         initView(context);
  50.     public CustomRelativeLayoutView(Context context, AttributeSet attrs) {
  51.     }
  52.         super(context);
  53.     }
  54.         ck_checkBox = (CheckBox) this.findViewById(R.id.ck_checkbox);
  55.     private void initView(Context context) {
  56.     private TextView is_update_state;
  57. 步骤二:新建一个类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()方法。然后给这个组合控件一个单机事件实现
  58. </RelativeLayout>
  59.         android:background=”#808080″/>
  60.         android:layout_marginRight=”10dp”
  61.         android:layout_marginTop=”5dp”
  62.         android:layout_below=”@id/tv_isUpdate_state”
  63.     <View
  64.         android:layout_width=”wrap_content”
  65.         android:layout_marginRight=”20dp”
  66.         android:focusable=”false”
  67.         android:id=”@+id/ck_checkbox”
  68.     <!–提示用户–>
  69.     <!–将CheckBox的clickable属性和focusable的属性设为false的目的是放弃CheckBox自身的属性,因为CheckBox的获取焦点和可点击的优先级–>
  70.         android:layout_marginLeft=”10dp”
  71.         android:textColor=”#808080″
  72.         android:layout_below=”@id/tv_isUpdate”
  73.         android:layout_width=”wrap_content”
  74.     <TextView
  75.         android:layout_marginLeft=”10dp”
  76.         android:textColor=”#000000″
  77.         android:layout_height=”wrap_content”
  78.         android:id=”@+id/tv_isUpdate”
  79.     <!–该布局文件是一个自定义的控件,可看成是一个整体的控件,由多个控件组成–>
  80.     android:layout_width=”fill_parent”
  81. <RelativeLayout
  82. 简述设置自定义组合控件的一般步骤
  83. 14.res/color/:存放定义了颜色状态列表资源(Color State List Resource)的XML文件
  84. 12. res/anim:用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frame by frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放)
  85. 10.res/raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式。存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID 也可以用,即R.raw.somefilename,Resources.getRawResource()方法可以获得这些资源。
点点赞赏,手留余香 给TA打赏

AI创作

评论0

请先

国开学习网《小学儿童教育心理学》第二次形考任务答案
国开学习网《小学儿童教育心理学》第二次形考任务答案
10分钟前 有人购买 去瞅瞅看
2023年春电大国家开放大学学习指南形考任务二
2023年春电大国家开放大学学习指南形考任务二
8分钟前 有人购买 去瞅瞅看
国开学习网《劳动与社会保障法》形考任务三答案
国开学习网《劳动与社会保障法》形考任务三答案
刚刚 有人购买 去瞅瞅看
支持多种货币
支持多种货币付款,满足您的付款需求
7天无忧退换
安心无忧购物,售后有保障
专业客服服务
百名资深客服7*24h在线服务
发货超时赔付
交易成功极速发货,专业水准保证时效性
显示验证码

社交账号快速登录