Android——Android基础控件

来源:互联网 发布:nodejs 多个js 编辑:程序博客网 时间:2024/06/02 00:26

View常用事件接口

View事件的监听

View的事件监听是指用户与应用交互,当用户对View进行点击、长按、触摸、移动的动作时,程序对这些动作进行处理。

onClickListener       点击View时的监听onLongClickListener   长按View时的监听onToucheListener      触摸View时的监听
Android系统中,onClickListener是一种处理的是点击事件的接口。
public void onClik(View v){    //参数v为事件源控件,当长时间按下此控件时才会触发该方法    //当多个组件共用同一个监听器时,用来区分组件}

在Android APP应用中,OnLongClick事件表示长按2秒以上就会触发的事,OnLongClickListener接口与OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即长时间按下某个View时触发的事件,该接口对应的回调方法如下

public boolean onLongClick(View v){//参数v为事件源控件,当长时间按下此控件时才会触发该方法//当多个组件共用同一个监听器时,用来区分组件//返回值:该方法的返回值为一个boolean类型的变量//当返回true时,表示已经完整地处理了这个事件,并不希望其他方法的回调方法再次进行处理//当返回false时,表示并没有完全处理该事件,更希望其他方法继续进行对其处理}

需要注意的以下几点:

  1. 监听器是一个接口,它包含了一个事件触发时系统会调用的函数。
  2. 在实现类中,根据项目的需要重写这个函数。
  3. 实现后的监听器需要绑定在按键的按钮上,就像一个耳机可以发出声音,但是你没有去戴它,你就听不到它发出的声音。一般情况是这个View可能需要这个监听器,而另外一个View需要另外一个监听器,每一个监听器各司其职,但功能相似时,也可以多个按钮共同绑定一个监听器。
  4. 各种控件,都有常用的事件,绑定监听器的函数命名规则是setOn****Listener

设置监听的几种方法

1. 让Activity实现接口

public class MainActivity extends Activity implements OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    Button back = (Button) findViewById(R.id.back);    back.setOnClickListener(this);    }     @Override    public void onClick(View v) {    //点击事件    }  }

2.匿名内部类

public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button back = (Button) findViewById(R.id.back);back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {    //点击事件        }    });   }}

3.onClick可以在xml中设置

<Button android:id="@+id/back" android:onClick="buttonClick" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="←" />

然后在代码中建立点击事件方法
必须是public void 名称同android:onClick(View v)

public void buttonClick(View v) {    //点击事件}

4.实现类

public class MyClick implements OnClickListener{@Overridepublic void onClick(View v) {    //点击事件    }  }@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button back = (Button) findViewById(R.id.back);MyClick listener = new MyClick();back.setOnClickListener(listener);}

5.成员变量

private OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {    //点击事件    }};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button back = (Button) findViewById(R.id.back);back.setOnClickListener(listener);}

基础组件

所有的控件都可以在java代码中创建出来,并且大部分的属性都对应set与get方法,比如

View view= new View(Context context) context是上下文,是Activity父类,一般传入当前Activity

EditText编辑框

EditText是程序用于和用户进行交互的的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。
EditText继承TextView,拥有TextView中所有的属性和方法,一般用来提供给用户进行文字,密码等输入操作。

注意:EditText大部分属性都属于TextView,但是在TextView上没有效果

EditText常用属性

android:capitalize 设置英文字母大写类型。设置如下值:        //sentences仅第一个字母大写;        //words每一个字母大小,用空格区分单词;        //characters每一个英文字母都大写。在模拟器上用PC键盘直接输入可以看到效果,但是在软键盘上没有效果android:digits  设置允许输入那些字符,如:"1234567890,+-*/%\n()"android:editable 设置是否可以编辑。仍然可以获取光标,但是无法输入android:hint   Text为空时显示文字提示信息,可以通过textColorHint设置提示信息的颜色。android:imeOptions 设置软件盘的Enter键。可用'|'设置多个,如下值可以设置:                //normal     默认,换行                //actionGo   软键盘下方变成"前往""去往""GO"根据输入法的不同而不同(下面的也一样)                //actionSearch  软键盘下方变成“搜索”或者放大镜。                //actionSend    软键盘下方变成“发送”。                //actionNext    软键盘下方变成“下一个”。                   //actionDone 软键盘下方变成“完成”,点击后光标保持在原来的输入框上,并且软键盘关闭android:inputType 设置文本的类型,用于帮助输入法显示合适的键盘类型。android:ems 设置TextView的宽度为N个字符的宽度。参见TextView中此属性的截图。android:maxLength 限制输入字符数。如设置为5,那么仅可以输入5个汉字/数字/英文字母。                

监听事件

EditText作为用户输入组件,使用频率非常高,而且当文字的改变,修改Enter键后,我们都要去处理Enter键监听事件

Enter监听事件

EditText etDone = (EditText) findViewById(R.id.etDone); //设置Enter按键处理事件 etDone.setOnEditorActionListener(new OnEditorActionListener() { @Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event){//处理//actionId 当前事件组件的资源ID,用来区分多个EditText用同一个监听器//event 事件源,封装了当前操作动作return false;    }});

文字改变监听

EditText etDone = (EditText) findViewById(R.id.etDone);//添加一个文字时改变监听etDone.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {   //文字改变时 回调此方法 }@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {    //文字改变之前}@Overridepublic void afterTextChanged(Editable s) {        //文字改变之后    }});

RadioGroup与RadioButton单选按钮

RadioButton是Button的子类,所以可以直接使用Button支持的各种属性,如果需要多个按钮同时只能被选中一个,需要放在同一个RadioGroup组中。
**RadioGroup是LinearLayout的子类,默认为从上到下排列子元素,如果需要改变成横向,需要设
置android:orientation为horizontal。**

RadioButton和RadioGroup的关系

  • RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器
  • 每个RadioGroup中的RadioButton同时只能有一个被选中
  • 不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中
  • 大部分场合下,一个RadioGroup中至少有2个RadioButton
  • 大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议将它放RadioGroup
    中的起始位置。

RadioGroup常用属性

android:checkedButton 值为数字,这是子单选按钮应该在默认情况下此单选组内选中的ID

监听事件

adioButton.setOnCheckedChangeListener();CompoundButton.OnCheckChangeListener:public void onCheckedChanged(CompoundButton 状态改变的button,boolean 是否被选中)一般开发中 使用下面这种模式RadioGroup.setOnCheckedChangeListener();RadioGroup.OnCheckChangeListener:public void onCheckedChanged(RadioGroup 状态改变的组, int 被选中的ButtonId号)

CheckBox多选框

和RadioButton相同,区别在于是多选按钮,同时可以多个被选中,每一个组件都有true和false两种check状态 。

android:checked一般使用CompoundButton的OnCheckedChangeListenerxml中使用@null来将背景或者button按钮图片取消

DatePicker&TimePicker

在Android程序中,我们通常需要使用DatePicker来设置日期,TimePicker来设置时间。其基本步骤是:

  • 先定义DatePicker和TimePicker布局
  • 然后通过Calendar类获得系统时间
  • 接着通过init方法将日期传递给DatePicker初始化日期控件,在响应点击事件中可以通过DatePicker
    的getYear()、getDayOfMonth()、getMonth()函数获取具体日期,同时可以在
    OnDateChangedListener事件中监听日期变化,设置时间函数方法同理。