20169205 2016-2017-2 《移动平台应用开发实践》第8周学习总结

20169205 2016-2017-2 《移动平台应用开发实践》第8周学习总结

教材学习内容总结

这四章的内容主要是对android studio的一些核心控件与视图及基本知识进行叙述。

  • 显示Options Menu

1.在res/menu中编写菜单资源文件
2. 在Activity中重写onCreateOptionsMenu和onOptionsItemSelected两个方法。

  • 上下文菜单

要在相应的view上按几秒后才显示的,用于view,跟某个具体的view
绑定在一起.
▪ 主要需要用到或重写Activity的以下方法:
▪ registerForContextMenu()为某个view注册context menu,一般在onCreate里面调用。
▪ onCreateContextMenu()创建context menu,context meun每次显示时都会调用这个函数。
▪ onContextItemSelected()处理选中的菜单项。

  • ListView
  1. 设置相关XML文件与Java源代码

打开res\layout\activity_main.xml,修改根元素为LinearLayout,同时加上本节要学习的控件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    tools:context="com.zrthas.administrator.commoncontrol.MainActivity">

     <ListView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView_fun">
    </ListView>
</LinearLayout>
打开res\lvalues\strings.xml中,将相对的XML字段修改如下:

<resources>
<string name="app_name">常用组件测试</string>
<string name="List_View">ListView演示</string>
<string name="commonControl_List">常用Android演示</string>
</resources>

最后在Java源代码中添加对ListView的调用

public class MainActivity extends AppCompatActivity {

    /*
    定义数组来表示listView要显示,也是我们学习哪些常用的控件
     */
    private static final String[] commonFunList = new String[]{

            "ListView控件演示",
            "ProgressBar控件演示",
            "GridView控件演示",
            "ScrollView控件演示",
            "DatePicker控件演示"
    };

    //定义listView
    private ListView listView ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView_fun);
        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                commonFunList));
    }
}
  1. 重要方法说明

在Java代码中,可以看到,Android对ListView的调用主要是由方法setAdapter。具体详细介绍:Android之Adapter用法总结。目前使用只要记得,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时用setAdapter完成适配的最后工作。

在setAdapter中的simple_list_item_1。为什么我们自己设置的TextView呢?这主要由于目前我们所使用的ListView为系统自带控件。它里面包含了simple_list_item_1、simple_list_item_2、two_line_list_item等。现在对这几个布局进行详解。

3.1 simple_list_item_1布局

此布局是最简单的一种布局方式。只含有一个TextView。作用于单行展示。就如我们运行后程序的列表。

3.2 simple_list_item_2布局

这个布局是双层布局,它包含两个TextView:android.R.id.text1和android.R.id.text2。此布局是上层为大字体,下层为小字体。

3.3 two_line_list_item布局

与simple_list_item_2布局一致包含两个TextView。而跟它不同的是,两层文字的大小都是一样大小的。

  1. Activity页面间跳转

经过几前章的学习,可能同学们对生成一个简单的ListView顺手而来。那我们根据以前所学习的内容,对ListView中的列表内容都创建相应的页面。同时点击列表,会跳转至相应的Activity中。下面分为两步:

4.1 判断点击哪个Item

这里面我们调用setOnItemClickListener监听器。

listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                       setTitle("您点击了第"+position+"个项目");
                    }
                }
        );

onItemClick后面有4个参数,乍看直接晕菜,那么每个参数究竟是何意义呢.
举个例子会理解的更快:
X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item。如果你点了b这个item。如下:
arg0相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X
arg1是你点的b这个view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
arg2是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
arg3是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的,如果需要的话,你可以自己加个log把position和id都弄出来在logcat里瞅瞅
而setTitle是将应用的标题改为当前所点击的行数。

获取到是点击哪个Item后,我们可以对这个Item进行跳转另一个Activity操作。在此之前,对应每个界面都生成一个布局文件与java文件。同时在AndroidManifest.xml添加新增的activity。

首先,在onCreate(Bundle)前加个方法toNewActivity(int)。这个方法是用来判断用户点击哪个Item,由此跳转到哪个Activity。以下是简单的实现:

/*** 根据Item的position位置来判断具体跳转至哪个Activity */
 private void toNewActivity(int position){
        Intent i;
        switch (position){
            case 0:
                i = new Intent(MainActivity.this,ListViewActivity.class);
                break;
            case 1:
                i = new Intent(MainActivity.this,ProgressBarActivity.class);
                break;
            case 2:
                i = new Intent(MainActivity.this,GridViewActivity.class);
                break;
            case 3:
                i = new Intent(MainActivity.this,ScrollViewActivity.class);
                break;
            case 4:
                i = new Intent(MainActivity.this,DatePickerActivity.class);
                break;
            default:
                i = new Intent(MainActivity.this,MainActivity.class);
                break;
        }
        startActivity(i);
    }

在原来对ListView监听器中,把setTitle()方法改成toNewActivity()。

listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        toNewActivity(position);
                    }
                }
        );

最后运行下项目,点击各个不同的Item,会跳转至不同的Activity。

  • GirdView使用
    GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。
    GridView常用的XML属性:
    Android:columnWidth 设置列的宽度。

android:gravity 设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical可以多选,用“|”分开。

android:horizontalSpacing 两列之间的间距。

android:numColumns 设置列数。

android:stretchMode 缩放模式。

android:verticalSpacing 两行之间的间距。

教材学习中的问题和解决过程

打开Android Studio,新建一个Android项目,然后发现可视化编辑界面无法正常显示,也就是Design视图

错误截图

解决

这是Android SDK 版本问题导致的错误,更改SDK版本即可
若只有一个可用API,可通过SDK Manager安装其它版本的SDK(API),点击工具栏SDK Manager或点击File->Settings->Appearance & Behavior -> System Settings -> Android SDK 进入SDK安装选项
安装新的SDK后,问题解决

上周重点错题总结

题目

Multi-dimensional arrays that contain arrays of different lengths in any one dimension are called __________.(包括不同长度数组的多维数组叫做

A .ragged arrays(锯齿状数组)
B .static arrays(静态数组)
C .two-dimensional arrays(二维数组)
D .constant arrays(常量数组)
E .overloaded arrays(重载数组)

正确答案: A

解析

Ragged arrays are multi-dimensional arrays that contain arrays at the same dimension with differing lengths.

学习进度条

码云项目地址

代码托管

因为重新git了一下,可能周的显示不是很正常

学习目标

时间 学习时间目标 实际进行时间
第一周 8 8
第二周 10 8.5
第三周 12 10.5
第四周 12 12
第五周 12 11
第六周 12 13
第七周 12 12
第八周 12 12

希望能够通过系统地学习,探索一些开源项目并改进功能,养成良好的开发习惯,形成一套完整的android生态知识体系,并能完全自主开发一款具有一定实用价值的app。

posted @ 2017-04-20 11:49  20169205-lewo  阅读(209)  评论(0编辑  收藏  举报