20155303 实验四 Android程序设计

20155303 实验四 Android程序设计

目录

第24章:初识Android

任务一:

完成Hello World, 要求修改res目录中的内容,Hello World后要显示本身的学号

完成这个任务,首先须要了解Android应用程序文件的组成:html

  • src目录:
    • 在src目录中保存了开发人员编写的程序文件。与通常的java项目相似,src目录下保存的是项目的全部包及源文件(.java),res目录下包含了项目中的全部资源。例如:程序图标(drawable)、布局文件(layout)和常量(value)等。
    • R.java文件是定义该项目全部资源的索引文件。通常R类是下面这种格式:
public final class R {
    public static final class attr{
        ...
    }
    public static final class drawable{
        ...
    }
    public static final class layout{
        ...
    }
    public static final class string{
        ...
    }
}

这个文件将使程序中资源的使用变得更加方便。因为这个文件不能被手动编译,因此当咱们在项目中加入新的资源时,只须要刷新一下该项目便可。java

  • 注意:在后面编写程序时可能会出现“没法找到R类”这样的错误,极可能是编译出现了问题。但具体状况还要具体分析。能够参考博客Android Studio中R文件丢失的解决办法android

  • manifest:
    • 其中包含了AndroidManifest.xml。这是一个控制文件,用来描述应用程序。不一样的参数表示不一样的含义,例如“manifest”为根节点,描述了package中的全部内容;“application”元素能够包含application的一些全局和默认的属性,如标签、icon、主题等等;“activity”是与用户交互的主要工具,一般包含一个或多个activity元素,描述App中的各类活动。这一点在后面的任务中还有体现。
  • res目录:
    • 存放了应用程序使用到的各类资源,如xml界面文件、图片、数据等。一般包含drawable子目录、layout子目录、values子目录三个。
    • drawable:存放分辨率不一样的图片。
    • layout:存放xml界面布局文件,主要用于显示用户操做界面。
    • values:存放不一样类型的数据,如string、array等。

对于这个任务,咱们只须要将布局文件activity_main.xml中相应的内容稍作修改:网络

将其中的android:text="Hello World!"改成android:text="Hello World!\n\t20155303"便可。app

运行结果以下:框架

学习Android Stuidio调试应用程序

Android Stuidio调试应用程序的方法和普通的java程序调试方法相似。除此以外,须要注意的一点是,可使用日志工具调试程序,很是简便。ide

调试过程以下:Tools->Android->Android Device Monitor工具

返回目录
布局

第25章:活动

任务二:建立 ThirdActivity, 在ThirdActivity中显示本身的学号,修改代码让MainActivity启动ThirdActivity

  • 配置Activity
    • 在文件AndroidManifest.xml中,只要为application...元素添加activity...子元素,便可配置Activity。
    • 在这个任务中,咱们须要调用ThirdActivity,因此在AndroidManifest.xml中再添加一个activity...>便可。
  • 启动、关闭Activity
    • 每个控制文件的Activity都须要有对应的启动程序文件(.java),和相应的布局文件(.xml)。
    • 在这个任务中,要求让MainActivity启动ThirdActivity,因此还须要修改MainActivity,相应代码段改成:
@Override
    public boolean onTouch(View arg0, MotionEvent event) {
        Intent intent = new Intent(this, ThirdActivity.class);
        intent.putExtra("message", "20155303狄唯佳");
        startActivity(intent);
        return true;
    }

在物理机上运行结果如图:学习

返回目录

第26章:UI组件

  • UI组件主要为主活动构建用户交互。在Android系统中,类View是一个最基本的UI类,几乎全部的UI组件都是继承于View类而实现的。
  • 类View的主要功能主要有:
    • 为指定的屏幕矩形区域存储布局和内容;
    • 处理尺寸和布局,绘制,焦点改变,翻屏,按键,手势
    • ......

任务三:修改代码让Toast消息中显示本身的学号信息

  • Toast是Android中用来显示信息的一种机制。Toast显示的时间有限,在通过一段时间后就会自动消失。
  • Toast有不少用法,如默认显示、自定义显示位置、带图片的显示、彻底自定义显示、其余线程调用显示等等。这里展现最经常使用的默认显示。

activity_main示例以下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.dragon.toast.Main">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="20155303狄唯佳"
        android:id="@+id/btn1"
        android:layout_alignParentTop="true"
        android:layout_marginTop="31dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

MainActivity.java示例以下:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnshow1 = (Button) findViewById(R.id.btn1);
        btnshow1.setOnClickListener(new View.OnClickListener()
                                    {
                                        @Override
                                        public void onClick(View v){
                                            Toast toast = Toast.makeText(MainActivity.this,"20155303狄唯佳", Toast.LENGTH_LONG);
                                            toast.show();
                                        }
                                    });

在物理机上演示结果以下:

- 注意:
- Android中官方建议的屏幕适配方式,经过根据不一样的分辨率在工程的res文件夹下创建不一样的尺寸文件夹,每一个文件夹下都创建dimens.xml文件。而后根据不一样的尺寸在dimens.xml文件夹中分别计算配置不一样的dp或者sp单位。
- 若是直接复制上面的代码,@dimen/activity_vertical_margin是红色的。@dimen/activity_vertical_marginvalues文件夹下面的dimens文件里面有一个name叫作activity_vertical_margin的项,咱们没有建立dimens文件夹,因此会提示找不到。
- 这个项里面值是android:paddingBottom的值。若是咱们想设定边距能够写为:android:paddingBottom="20dp"。不过这种写法不太建议,正规开发的规范写法是把尺寸放入dimens文件中。

返回目录

第27章:布局

  • 做为一个重要的Android组件,布局定义了UI组件的可视化结构。以下是Android中的一些布局:
    • 线性布局LinearLayout:将全部子视图以相同方向(水平地或竖直地)对齐的一个布局;
    • 相对布局RelativeLayout:根据子视图的一个或多个同级视图的位置来排列它的一个布局;
    • 帧布局FrameLayout:将每个子视图放在另外一个视图顶部的一种布局;
    • 表格布局TableLayout:将子视图按照行和列来组织的一种布局;
    • 网格布局GridLayout:将子视图放置到一个栅格中的一种布局
    • ......

任务四:修改布局让P290页的界面与教材不一样

P290是一个帧布局的示例,那么咱们就以这个为例进行具体说明。

  • 帧布局容器为每一个组件建立一个空白区域,一个区域称为一帧,这些帧会根据FrameLayout中定义的gravity属性自动对齐。
  • 咱们须要为组件添加layout_gravity属性,从而自定义组建的对齐方式。若是不使用layout_gravity属性,多项内容会重叠。
  • layout_gravity可使用以下所示的取值:
    • top:将对象放在其容器的顶部,不改变其大小;
    • bottom:将对象放在其容器的底部,不改变其大小;
    • left:将对象放在其容器的左侧,不改变其大小;
    • certer_vertical:将对象纵向居中,不改变其大小,垂直方向上居中对齐;
    • ......

好比我修改的结果以下(内容较少,因此我就没有使用layout_gravity属性来控制其在父控件中的位置):

<TextView   
    android:id="@+id/tv1"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:textSize="50sp"  
    android:textColor="#000000"  
    android:text="20155303"/>  
<TextView   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:textSize="40sp"  
    android:textColor="#ffff00"    
    android:text="狄唯佳"/>

查看xml文件,这样就获得了如下效果:

返回目录

第28章:监听器

  • Android是基于事件的。使用活动中的一个视图进行的用户交互,可能会触发一个事件,包括点击、长按、触碰和按键等等。
  • 要让程序响应某一个事件,须要为该事件编写一个监听器。也就是要实现嵌入在android.view.View类中的一个接口。好比OnClickListener接口的onClick()方法。

任务五:运行教材本章相关代码并截图

以课本P298为例,代码以下:

int counter = 0;
    int[] colors = { Color.BLACK, Color.BLUE, Color.CYAN,
            Color.DKGRAY, Color.GRAY, Color.GREEN, Color.LTGRAY,
            Color.MAGENTA, Color.RED, Color.WHITE, Color.YELLOW };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it
// is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    public void changeColor(View view) {
        if (counter == colors.length) {
            counter = 0;
        }
        view.setBackgroundColor(colors[counter++]);
    }

当用户按下(或触碰)时钟的时候,会调用该方法并接受时钟对象。要修改时钟的颜色,须要调用其setBackgroundColor方法,传入一个颜色对象,从而实现触碰时钟改变颜色。

在物理机上运行结果以下:

返回目录

实验体会与总结

  • 此次实验是全新的内容,将java用在了咱们以前从未接触过的领域——Android开发。教材上的知识比较基础,但对于咱们初学者来讲起到了很好的引领做用。在我看来,此次实验的目的不在于让咱们学到多么复杂深奥的知识,而在于给了咱们拓宽视野的机会,培养咱们对未知事物的兴趣。完成此次实验,咱们大体了解了Android开发的流程和框架,为从此深刻学习打下了基础。
  • 五个任务都很基础,也较容易实现,虽然安装AndroidStudio、建立project等等的过程当中遇到了重重阻隔,不过有了老师的帮助,再加上能够查阅大量资源,一个一个的问题也就迎刃而解了。
  • 娄老师以前说过,“知识能造成结构,有融会贯通的感受,才能体会到学习的乐趣,困难的事情也会越作越容易”。对这句话的理解也在学习的过程当中不断加深。各个未知的知识领域之间的关系错综复杂,初学者老是拘泥于一个点而不是整个网络。若是理清学科之间的关系,不但对单个领域有了更加深刻全面的认识,最重要的是能触类旁通,举一反三。这样一来,知识体系的宽度和深度都有了质的提高。

  • 最后一点小小的感想...每一次都在本该严肃的技术博客中附上学习的心路历程,分享过愉悦也记录过迷茫,博客俨然成了个人心情全纪实…哈哈:)...不过回头看看,这个学期真的收获不少,但愿本身可以继续保持这种状态,一点一点进步吧~

返回目录

参考资料

相关文章
相关标签/搜索