android基本组件介绍

1、View视图组件:所有的高级UI组件都是继承View类而实现的。一个view在屏幕上占据一块矩形区域,负责渲染这块矩形局域,也可以处理这块矩形区域是上的事件。    
      Viewgroup视图容器组件
:就是View的容器,负责对添加进Viewgroup的这些View进行布局。容器也可以嵌套。
      Layout布局组件:实现组件在页面上的展示布局
      LayoutParams布局参数

2、android:layout_width — 一般的值为“fill_parent”、“wrap_content”、“match_parent”。(带有layout的属性是指整个控件而言的,是与父控件之间的关系;而不带layout的属性是对控件中文本的格式)
      android:layout_alignParentRight — 使当前空间的右端和父控件的右端对齐。属性值只能为true或false。
      android:completionThreshold — 属性设置了一个阀值,规定用户打了多少字符之后才出现自动提示,默认值是2,我们在这里改成了1。
      android:dropDownHorizontalOffset — 设置下拉菜单与文本框之间的水平偏移
      android:completionHint — 设置出现在下拉菜单中的提示标题

设置单元格内的控件的形状(可压缩,可伸长,可隐藏等)

    android:shrinkColumns设置该列的所有单元格的宽度可以被收缩,以保证该表格能够适应父容器宽度

    android:stretchColumns 设置该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间

    android:collapseColumns设置该列的所有单元格会被隐藏

 

3、布局:

1)FrameLayout:整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分或全部遮挡。

2)LinearLayout:按照垂直或水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,将是一个N行单列的结构;如果是水平排列,将是一个单列N行的结构。LinearLayout中的子元素属性android:layout_weight生效,它用于描述该子元素在剩余空间中占有的大小比例。android:layout_weight遵循数值越小,重要度越高的原则。如:一行中有两个不等长的文本框,那么他们的android:layout_weight值分别为1和2,那么第一个文本框将占据剩余空间的三分之二,第二个文本框将占据剩余空间中的三分之一。

3)RelativeLayout:按照各子元素之间的位置关系完成布局。在此布局中的子元素里与位置相关的属性都将生效。子元素就是通过这些位置属性和各自的ID配合指定位置关系的。需要注意的是:引用的ID必须在引用之前,先被定义,否则将异常
常用位置属性:

      android:layout_toLeftOf —— 该组件位于所引用组件的左方

      android:layout_toRightOf —— 该组件位于所引用组件的右方

      android:layout_above —— 该组件位于所引用组件的上方

      android:layout_below —— 该组件位于所引用组件的下方

      android:layout_alignParentLeft —— 该组件是否对齐父组件的左端(只有true或false)

      android:layout_alignParentRight —— 该组件是否齐其父组件的右端

      android:layout_alignParentTop —— 该组件是否对齐父组件的顶部

      android:layout_alignParentBottom —— 该组件是否对齐父组件的底部

      android:layout_centerInParent —— 该组件是否相对于父组件居中

  android:layout_centerHorizontal —— 该组件是否横向居中

      android:layout_centerVertical —— 该组件是否垂直居中

4)TableLayout:表格布局,使用于N行N列的布局格式。一个TableLayout是由许多的TableRow组成的,一个TableRow就代表一个TableLayout中的一行。TableRow是LinearLayout的子类,它的android:orientation属性值恒为horizontal,并且它的android:layout_width和android:layout_height属性值恒为MATCH_PARENT和WRAP_CONTENT。所以它的子元素都是横向排列,并且宽高一致的。这样的设计使得每个TableRow里的子元素都相当于表格中的单元格一样。在TableRow中,单元格可以为空,但是不能跨列。

5)AbsoluteLayout:绝对位置布局,在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述子元素的坐标位置。屏幕左上角为坐标原点(0,0),向右下方向是逐渐增大的过程。在实际的开发中,通常不采用此布局格式,因为代码过于刚性,不能呢个适合所有的终端。


4、android里的字体大小单位

1)px:象素,屏幕实际的象素。

2)in:英寸,屏幕的物理尺寸

3)mm:毫米,屏幕的物理尺寸

4)pt:点,屏幕的物理尺寸。1/72英寸

5)dp/dip:与密度无关的象素,一种基于屏幕密度的抽象单位。

6)sp:与刻度无关的象素,主要用于字体显示,作为和文字相关大小单位。


5、android实现事件功能的方法

1)匿名内部类作为事件监听器类:

Button button = (Button) findViewById(R.id.cbutton);
button.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View v) {
	setTitle("button is clicked!");
    }
});
这种方法是推荐使用的因为事件处理器没有什么共享的价值,大部分事件监听器都是使用一次。


2)内部类作为监听器

class MyButton implements OnClickListener{
    @Override
    public void onClick(View v) {
	setTitle("button is clicked!");
    }
}
使用内部类的好处是,可以再当前类中复用监听器类。

3)Activity本身作为事件监听器,即activity继承监听器类

public class MainActivity extends Activity implements OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button button = (Button) findViewById(R.id.cbutton);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
	setTitle("button is clicked!!!");
    }
}

这种形式使用activity本身作为监听器类,可以直接在activity类中定义事件处理器方法,这种形式非常简洁。但这种做法有两个缺点:(1)这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱。(2)如果activity界面类需要实现监听器接口,让人感觉比较怪异。

4)外部类作为监听器:就是把监听器类写在Activity类的外部,调用方式和内部类一样。


6、常用widget组件:Button、TextView(文本框)、EditView(编辑框)、
CheckBox(多向选择框):触发OnCheckedChange事件,可以对应的使用OnCheckedChangeListener监听器来监听这个事件。两种不同写法的事件响应:第一种是内联函数的方式;第二种是整个Activity本身作为事件监听器。

beijing.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        if(isChecked){ 
            editText1.setText(buttonView.getText()+"选中"); 
        }else{ 
            editText1.setText(buttonView.getText()+"取消选中"); 
        } 
   } 
}); 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked){ 
	r += (String) buttonView.getText(); 
    } else {
	String s = (String) buttonView.getText();
	if(null != s){
	    r = r.replace(s, "");
	}
    }
    setTitle("get by selected: " + r);
}

RadioBox(单项选择框):注意这里的事件仍然监听OnCheckedChangeListener监听器,只是参数不同。
RadioGroup mygroup = (RadioGroup) findViewById(R.id.radio_group);
final RadioButton one = (RadioButton) findViewById(R.id.radio0);        
final TextView txt = (TextView) findViewById(R.id.textView1);
        
mygroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
	if(checkedId == one.getId()){
	    txt.setText(one.getText());
	}
    }
});


        


Spinner(下拉列表):详见Spinner下拉列表装填数据的方法 和Android的Adapter的用法


AutoCompleteTextView(自动完成文本)

public class AutoCompleteActivity extends Activity {
    String[] books = new String[] { "rollen", "rollenholt", "rollenren", "roll" }; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.autocomplete);
        
       AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.myautocomplete);
       ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, books);
       textView.setAdapter(adapter);
    }
}
----------------------
 
  
         
 

 

DatePicker(日期选择器)
@Override
    protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        setContentView(R.layout.datepicker);
        DatePicker dp = (DatePicker) this.findViewById(R.id.datepicker);
        final TextView dateEt=(TextView)findViewById(R.id.datetext);
        
        TimePicker tp =  (TimePicker) this.findViewById(R.id.timepicker);
        final TextView timeEt=(TextView)findViewById(R.id.timetext);
        
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        dp.init(year, month, day, new DatePicker.OnDateChangedListener() {
			
			@Override
			public void onDateChanged(DatePicker view, int year, int monthOfYear,
					int dayOfMonth) {
				dateEt.setText("您选择的日期是:"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日。");
			}
		});
        
        tp.setCurrentHour(calendar.get(Calendar.HOUR));
        tp.setCurrentMinute(calendar.get(Calendar.MINUTE));   // 根据需要设置时间
        tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
			
			@Override
			public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
				timeEt.setText("您选择的时间是:"+hourOfDay+"时"+minute+"分。");
			}
		});



ScrollView(滚动试图)
ScrollView的主要功能是将一个屏幕显示不了的内容,通过滚动显示出来,使用这个组件也比较直观,直接在XXLayout外面加上ScrollView组件申明即可,java代码不用动。



        
     ....  ....
    


ProgressBar(进度条)

重要的方法:

    getMax():返回这个进度条的范围的上限
   
getProgress():返回进度
   
getSecondaryProgress():返回次要进度
   
incrementProgressBy(int diff):指定增加的进度
   
isIndeterminate():指示进度条是否在不确定模式下
   
setIndeterminate(boolean indeterminate):设置不确定模式下
   
setVisibility(int v):设置该进度条是否可视

重要事件:

    onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

 

7、Dialog对话框

dialog直接由Object构造出来,由activity来维护其生命周期,负责生成、保存、回复它。

showDialog(int id):负责显示标识为id的dialog。
dimissDialog(int id):根据id小时米格dialog

Dialog有两个比较常见的回调函数,onCreateDialog(int id)和onPrepareDialog(int id, Dialog dialog)。

当activity调用来了showDialog后,如果Dialog是第一次生成,系统将反向调用Dialog的回调函数onCreateDialog,然后再调用onPrepareDialog;吐过这个Dialog已经生成,只不过还没有显示出来,将直接调用onPrepareDialog方法。

--------

AlertDialog是Dialog的一个直接子类,一个AlertDialog可以有两个或三个Button,可以对一个AlertDialog设置title和message。不能直接通过AlertDialog的构造函数来生成一个AlertDialog,一般是通过它的一个内部静态类AlertDailog.Builder来构造。

1)确认对话框:就是确定或取消

private void comfirmDialog(){
     AlertDialog.Builder builder = new Builder(this);
     builder.setIcon(R.drawable.ic_launcher);
     builder.setMessage("Are you confirm to exit?");
     builder.setTitle("notice");
		
     builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
	@Override
	public void onClick(DialogInterface dialog, int which) {
		dialog.dismiss();
	}
     });

     builder.setPositiveButton("confirm", new DialogInterface.OnClickListener() {
	@Override
	public void onClick(DialogInterface dialog, int which) {
		dialog.dismiss();
		setTitle("you click the confirm button.");
	}
     });
		
     builder.create().show();  //生成配置好的Dialog,并显示出来
}


2)信息内容显示的是View类型的,自定义类型

builder.setView(View),通过这种方法将实现好的个性化View放置到Dialog里去。

LayoutInflater inflater = LayoutInflater.from(this);
final View view = inflater.inflate(R.layout.inflate, null);
builder.setView(view);



// 如何取动态页面控件的值



EditText username = (EditText) view.findViewById(R.id.username);


LayoutInflater:对于没有被载入或者动态载入的界面,可以用它。它是用来找layout下xml布局文件,并实例化对象。

可以通过getSystemService(Context.LAYOUT_INFLATER_SERVICE)LayoutInflater inflater = getLayoutInflater()或者LayoutInflater.from(this)d来获得LayoutInflate实例对象,在通过inflate方法载入layout的xml文件。

getSystemService里的activity中的方法,根据传入的name来取得对应的服务对象,这些服务名称参数都是Context类中的变量:

传入的Name                                                              返回的对象                                     说明
WINDOW_SERVICE                                            WindowManager                     管理打开的窗口程序
LAYOUT_INFLATER_SERVICE                           LayoutInflater                         取得xml里定义的view
ACTIVITY_SERVICE                                             ActivityManager                       管理应用程序的系统状态
POWER_SERVICE                                                PowerManger                              电源的服务
ALARM_SERVICE                                                 AlarmManager                             闹钟的服务
NOTIFICATION_SERVICE                               NotificationManager                     状态栏的服务
KEYGUARD_SERVICE                                      KeyguardManager                      键盘锁的服务
LOCATION_SERVICE                                         LocationManager                   位置的服务,如GPS
SEARCH_SERVICE                                             SearchManager                         搜索的服务
VEBRATOR_SERVICE                                             Vebrator                               手机震动的服务
CONNECTIVITY_SERVICE                                   Connectivity                           网络连接的服务
WIFI_SERVICE                                                        WifiManager                            Wi-Fi服务
TELEPHONY_SERVICE                                 TeleponyManager                          电话服务

3)信息内容是一组单选框、多选框或简单列表项

单选框:setSingleChoiceItems()方法
多选框:setMultiChoiceItems()方法
列表项:setItems()方法

4)进度条dialog

ProgressDialog dialog = new ProgressDialog(this);
dialog.setTitle("downloading the songs");
dialog.setMessage("waiting...");
dialog.show();


8、Toast和Notification

 pendingIntent:可以看成是对Intent的包装,当前app不能用它马上启动其所包含的Intent,而是在外部app执行这个pendingIntent时,间接地、实际地调用里面的Intent的。pendingIntent主要的信息时其所包转的intent和当前app的content。
主要用于处理即将发生的事情,比如Notification中用于页面的跳转,但不是马上跳转。(intent是及时启动,随所在的activity消失而消失)

你可能感兴趣的:(android)