android布局与组件


一、Android布局:
布局的概念是针对Activity的。 在一个应用程序中通常由多个Activity构成,每个需要显示的Activity都需要在AndroidManifest.xml文件之中声明;
创建UI组件:通过xml方法配置;     当需要动态生成时,使用Java代码;
Android应用的绝大部分UI组件都放在android.widget包及其子包、android.view及其子包中。Android应用的所有UI组件都继承了View类。GroupView类是View类的子类,是所有布局管理器的父类。
结构:
       android.view.View

          android.view.ViewGroup
   
直接子类: AbsoluteLayout AdapterView <T extends  Adapter >,  DrawerLayout FragmentBreadCrumbs FrameLayout

 间接子类:








ViewGroup容器控制其子组件的分布依赖于ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类。


ViewGroup.LayoutParams提供两个XML属性设定组件的大小:

  • android:layout_height:指定该子组件的基本高度;
  • android:layout_width:指定该子组件的基本宽度。
这两个属性有三个特定的值:
  • fill_parent:指定组件的高度、宽度与父容器组件的一样。
  • match_parent:与fill_parent一样,Android2.2开始推荐使用。
  • warp_content:内容包裹。

ViewGroup.MarginLayoutParams用于控制子组件周围的页边距:
  • android:layout_marginBottom(下边距);
  • android:layout_marginLeft(左边距);
  • android:layout_marginRight(右边距):
  • android:layout_marginTop(上边距)

对于View的尺寸,android提供了三种单位供选择使用:

  • px:像素。
  • dp:dpi,表示屏幕实际的像素。
  • sp:会根据系统设定的字体大小进行缩放,与dp类似,通常用于设置字体。


二、Android控件:
  1. Button:
    1. 监听器:onClickListener;
    2. 需要实现的方法:public void onClick(View v),v表示触发的控件,比如按钮;
  2. ImageButton:
    1. 可以自定义图片的Button;
    2. ImageView的子类;
  3. TextView:
    1. 文本显示控件。预定义了一些类似于HTML的标签。多种配置属性。TextView无法输入;
    2. 结构:
      1. java.lang.Object
          android.view.View
            android.widget.TextView
    3. 直接子类: Button, CheckedTextView, Chronometer, DigitalClock, EditText
    4. 间接子类: AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,MultiAutoCompleteTextView, RadioButton, ToggleButton
  4. EditText:
    1. TextView的子类,文本控件,提供文本输入的功能。可以理解为可以输入的TextView。(如添加表情图片,输入内容验证,错误提示消息等)
  5. CheckBox:
    1. 多选框;
    2. 监听器: onCheckedChangeListener;
    3. 需要实现的方法: public void onCheckedChanged(CompundButton buttonView,boolean isChecked);
  6. RadioButton:
    1. 单选框;
    2. 监听器: OnCheckedChangeListener;与CheckBox的监听器名字相同,但不在同一个包;
    3. 多个单选框放在RadioGroup中;
  7. Toggle Buttons \ Switches:

    1. 在属性中加入 android:onClick,实现方法
      public void onToggleClicked(View view) {
          // Is the toggle on?
          boolean on = ((ToggleButton) view).isChecked();
         
          if (on) {
              // Enable vibrate
          } else {
              // Disable vibrate
          }}
  8. Spinners:
    1. 从集合中选择一个值

    2. spinner中供选择的项可以来自任何源,但必须通过一个SpinnerAdapter。如:源是一个数组,使用ArrayAdapter,源来自数据库查询,使用CursorAdapter。如果提供的选择是事先定义好的,使用一个string resource file:
      1. <?xml version="1.0" encoding="utf-8"?><resources>
            <string-array name="planets_array">
                <item>Mercury</item>
                <item>Venus</item>
                <item>Earth</item>
                <item>Mars</item>
                <item>Jupiter</item>
                <item>Saturn</item>
                <item>Uranus</item>
                <item>Neptune</item>
            </string-array></resources>
    3. 监听器: OnItemSelectedListener
    4. 实现的方法:
          public void onItemSelected(AdapterView<?> parent, View view, 
                  int pos, long id) {
              // An item was selected. You can retrieve the selected item using
              // parent.getItemAtPosition(pos)
          }

          public void onNothingSelected(AdapterView<?> parent) {
              // Another interface callback
          }
  9. Pickers:

  10. ImageView:
    1. 显示任意图像,例如图标。ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便它可以在其他布局中使用,并提供例如缩放和着色(渲染)各种显示选项;
    2. 结构:

      java.lang.Object

        android.view.View

          android.widget.ImageView
    3. 直接子类: ImageButton, QuickContactBadge
    4. 间接子类: ZoomButton
  11. ProgressBar:
    1. 进度条;
  12. Dialog:
    1. 提示框;
    2. 不在xml中定义,直接在Activity中创建;
  13. TabHost:
    1. 不在xml中定义,直接在TabActivity中创建(Activity需要继承TabActivity);
    2. TabSpec为引用布局文件的ID;
    3. 监听器: OnTabChangedListener;
    4. 需要实现的方法: public void onTagChanged(String tabId);
  14. SeekBar:
    1. 拖动条;
    2. 监听器: OnSeekBarChangeListener;
    3. 实现方法:
      1. public void onStartTrackingTouch(SeekBar seekBar); //开始移动时调用
      2. public void onStopTrackingTouch(SeekBar seekbar); //结束移动时调用
      3. public void onProgressChanged(SeekBar seekBar,int progress,boolean fromUser); //改变时调用,progress为当前值

一般说来,声明UI元素所用到的XML词汇(vocabulary)跟类和方法的命名以及结构对应得很紧密,体现在元素的名字对应于类名而属性名对应于方法名。

三、事件监听器

事件监听器是View类中只包含一个回调方法的接口。当一个控件注册了事件监听器并且发生了相应的UI事件,这个方法就会被Android系统调用。
监听器中包含的回调方法:
onClick():
From View.OnClickListener. 这个方法在触摸模式下,触碰到就会被触发;使用导航键或者轨迹球是这个 View 获取焦点,然后点击"Enter"或者按下轨迹球,这个方法也会被触发。

onLongClick():
From View.OnLongClickListener. 在触摸模式下,用户长按着这个控件,将会调用这个方法;通过导航键或者轨迹球定位到这个控件,然后长按“Enter”键或者按住轨迹球(一秒中),这个方法将会被调用。

onFocusChange():
From View.OnFocusChangeListener. 当用户使用导航键或者轨迹球,将焦点由这个控件移向其他控件时,这个方法会被调用。

onKey():
From View.OnKeyListener. 当这个控件获得焦点时,用户按下或者松开设备的物理按键,这个方法就会被调用。

onTouch():
From View.OnTouchListener. 发生在这个控件上(在控件的边界之内)的移动、按下、松开等操作都会调用这个方法。

onCreateContextMenu():
From View.OnCreateContextMenuListener. 当 Context Menu 被创建时调用(比如我们在长按某个控件时,会弹出菜单来让用户做一些选择)。这一点将会在 Menus 文章中详细介绍。


事件处理器:







     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值