• 1. 智能手机软件开发技术主讲:董鑫正 公共邮箱:pptfromdxz@163.com
  • 2. 内容回顾搭建Android开发环境需要的软件? 哪些路径需要设置环境变量? Android应用程序组件有哪些?各有什么用处? Android生命周期中可以被重写的回调函数有哪些?
  • 3. 第7章 UI基础知识Android UI组件概述 UI设计工具 事件处理模型 Activity中的常用事件 菜单
  • 4. Android UI组件概述应用程序的好坏,主要有三个元素决定 界面 功能 性能 界面给用户的第一感觉至关重要 UI的设计与控制是程序开发核心内容之一 Android的UI元素包括 Activity、View、ViewGroup、布局
  • 5. View所有控件都继承了android.view.View类
  • 6. View“基础控件”主要包括 Button ImageButton ToggleButton TextView EditText RadioButton CheckBox ImageView ProgressBar SeekBar RatingBar
  • 7. View Hierarchy Tree  Activity类调用setContentView( ) 方法
  • 8. ViewGroupViewGroup是View类的一个重要子类 ViewGroup是高级控件和布局的父类 ViewGroup通常叫做“容器”或“组件” 高级控件包括: AutoCompleteTextView Spinner ListView GridView Gallery
  • 9. 布局管理器五种布局 FrameLayout:帧布局 LinearLayout:线性布局 AbsoluteLayout:绝对布局 RelativeLayout:相对布局 TableLayout:表格布局
  • 10. 第7章 UI基础知识Android UI组件概述 UI设计工具 事件处理模型 Activity中的常用事件 菜单
  • 11. UI设计工具拖拽设计工具 DroidDraw ADT插件UI设计工具 功能有限,不像WinForm和WebForm的UI设计工具那样完善 建议 使用ADT插件工具的XML方式设计
  • 12. 第7章 UI基础知识Android UI组件概述 UI设计工具 事件处理模型 Activity中的常用事件 菜单
  • 13. 事件处理模型事件处理的相关概念 事件:KeyEvent、MotionEvent 事件源:各个控件 事件处理者:实现接口类 事件处理模型 接口实现 内部类 匿名内部类
  • 14. 接口实现public class chapter4_1_1 extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.Button01); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.Button01: TextView text = (TextView) findViewById(R.id.TextView01); text.setText("你好!"); } } }
  • 15. 内部类public class chapter4_1_2 extends Activity { private TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView) findViewById(R.id.TextView01); Button button1 = (Button) findViewById(R.id.Button01); button1.setOnClickListener(new Button1_OnClickListener()); } class Button1_OnClickListener implements OnClickListener { public void onClick(View v) { text.setText("你好!"); } } }
  • 16. 匿名内部类public class chapter4_1_3 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.Button01); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { TextView text = (TextView) findViewById(R.id.TextView01); text.setText("你好!"); } }); } }
  • 17. 第7章 UI基础知识Android UI组件概述 UI设计工具 事件处理模型 Activity中的常用事件 菜单
  • 18. Activity中的常用事件常用事件 触屏事件:MotionEvent 键盘事件:KeyEvent 事件源 View Activity
  • 19. 触屏事件重写方法 public boolean onTouchEvent(MotionEvent event) event.getAction( ) MotionEvent.ACTION_DOWN:0 MotionEvent.ACTION_UP:1 MotionEvent.ACTION_MOVE:2 event.getX( ) event.getY( )
  • 20. 键盘事件重写方法 public boolean onKeyDown(int keyCode, KeyEvent event) keyCode 按键码 event.getAction( ) KeyEvent.ACTION_DOWN:0 KeyEvent.ACTION_UP:1
  • 21. 第7章 UI基础知识Android UI组件概述 UI设计工具 事件处理模型 Activity中的常用事件 菜单
  • 22. 菜单菜单在手机屏幕的下方,通常是隐藏的,以节省屏幕空间 用户按手机上的菜单按钮时,菜单从屏幕正文滑动出来 使用菜单主要由两部分工作组成 创建和初始化菜单 菜单项事件处理 文本菜单和包含图片菜单
  • 23. 文本菜单
  • 24. 文本菜单创建 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, RED_MENU_ID, 0, R.string.menu1); menu.add(0, GREEN_MENU_ID, 0, R.string.menu2); menu.add(0, BLUE_MENU_ID, 0, R.string.menu3); return true; }
  • 25. 文本菜单事件处理 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case RED_MENU_ID: mTextView.setText(R.string.menu1); return true; case GREEN_MENU_ID: mTextView.setText(R.string.menu2); return true; case BLUE_MENU_ID: mTextView.setText(R.string.menu3); return true; } return super.onOptionsItemSelected(item); }
  • 26. 带图片的菜单
  • 27. 带图片的菜单创建 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, RED_MENU_ID, 0, R.string.menu1).setIcon(R.drawable.redimage); menu.add(0, GREEN_MENU_ID, 0, R.string.menu2).setIcon(R.drawable.yellowimage); menu.add(0, BLUE_MENU_ID, 0, R.string.menu3).setIcon(R.drawable.blueimage); return true; }