Mostly used view
Web View
List View:显示列表-微信中的tabs
Grid View:比如表情图列表
Scroll View
Surface View :非UI线程,如在游戏中做一些耗时的操作
控件之间的布局
新建Layout 名字全都小写
xmlns xml name space //还可以自定义空间
LineanerLayout:horizontal or Vertical,排列组合顺序即text里控件的顺序 weightsum, weight比重,用来分配比例
RelativeLayout:align 不同对齐用法;一个页面里不同button可叠加,后面的覆盖前面的。align 相对于其他控件来布局,用@+id/view_name
margin 是外边距;padding 是内边距
FrameLayout
AbsoluteLayout 要适应不同屏幕,不用
TableLayout //表格布局,做表格时会用到
Activity 生命周期
1. onCreate () // 完成初始化操作
2. onStart() // 活动由不可见变为可见的时候调用
3. onResume() // 活动准备好和用户进行交互的时候进行调用,此时活动位于返回栈最顶端,处于运行状态
4. onPause() // 系统准备去启动或恢复另一活动时调用。将一些消耗CPU的资源释放掉,保存一些关键数据 *这个方法的执行速度一定要快,不然会影响新的栈顶活动的使用
5. onStop() // 活动完全不可见时调用。区别onPause() 如果启用的新活动是一个对话框式的活动,那么onPause()会执行,而onStop()不会
6. onDestroy() // 被销毁前调用,之后活动状态将变为销毁状态
7. onRestart //
1-6 完整生存期
2-5 可见生存期
3-4 前台生存期
ListView
ListView 让客户可以通过滑动,将页面外的数据展现出来
ListView 用于展示大量的数据。数据需要借助Adapter适配器来完成
ArrayAdapter
以第一行代码里的示例:
@Override
public View getView(int position, View convertView, ViewGroup parent) { //用于传递上下文,ListView 子项布局的id和数据
//重写getView,这个方法在每个子项被滚动到屏幕内的时候会被调用
Fruit fruit = getItem(position); // 获取当前项的Fruit实例
View view = LayoutInflater.from(getContext()).inflate(resourceId, null); // LayoutInflater 位这个子项加载传入的布局
ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
fruitImage.setImageResource(fruit.getImageId()); //设置显示的文字和图片
fruitName.setText(fruit.getName());
return view; //返回布局
// 自定义的适配器完成
}
-->> 回到MainActivity
添加方法初始化数据,在构造函数中传入对应文字和图片,然后把创建好的对象添加到列表中在onCreate() 创建adapter对象,并将其作为适配器传递给ListView,完成定制ListView界面
提升运行效率:convertView--用于将之前加载好的布局进行缓存,以便之后可以进行重用。
新增内部类ViewHolder, 用于对控件实例进行缓存,当convertView 为空的时候,创建一个ViewHolder 对象,并将控件的实例都存放在ViewHolder 里,然后调用View
的setTag()方法,将ViewHolder 对象存储在View 中。当convertView 不为空的时候则调用View 的getTag()方法,把ViewHolder 重新取出。这样所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件实例了。
ListView 点击事件:setOnItemClickListener()
ListView部分参考《第一行代码》
= = ||| 这周学的我要狗带了,滚回去补习Java。。。