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
- 设置相关XML文件与Java源代码
打开reslayoutactivity_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>
打开reslvaluesstrings.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));
}
}
- 重要方法说明
在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。而跟它不同的是,两层文字的大小都是一样大小的。
- 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。