安卓开发(3):事件处理
来源:互联网 发布:小狐仙软件 编辑:程序博客网 时间:2024/05/16 10:46
还是先上一个应用开发需求:
实现一个 Android 应用,界面如下,
要求:
(1) 该界面为应用启动后看到的第一个界面
(2) 输入学号和密码的控件要求用TextInputLayout实现
(3) 点击图片,弹出对话框如下图:
点击“拍摄”选项,弹出 Toast 信息“您选择了[拍摄]”;
点击“从相册选择”选项,弹出 Toast 信息“您选择了[从相册选择];点击“取消”按钮,弹出 Toast 信息“您选择了[取消]”。
(4)切换RadioButton的选项,弹出 Snackbar 提示“您选择了 xx”;
例如从选项“学生”切换到选项“教职工”,则提示“您选择了教职工”;
点击 Snackbar上的“确定”按钮,则弹出 Toast 信息“Snackbar的确定按钮被点击了”
(5) 点击登录按钮
依次判断学号是否为空,密码是否为空,用户名和密码是否正确(正确的学号和密码分别为“123456”,“6666”);不正确则给出错误信息,如学号和密码都正确则提示“登陆成功”,如图:
(6)点击注册按钮
如果切换选项时,RadioButton 选中的是“学生”,那么弹出 Snackbar 信息“学生注册功能尚未启用”,如果选中的是“教职工”,那么弹出 Toast 信息“教职工注册功能尚未启用”。相关知识:
1、在java文件中引用布局文件中的控件
2、弹出 Toast信息
在需要弹出 Toast 信息的地方,写上:三个参数分别为context,text,duration。context 是一个上下文类型,写上使用这个方法的 java 类名加上.this 即可,text是 Toast 要显示的信息,duration 是 Toast 显示的时间长度,有 Toast.LENGTH_SHORT 和 Toast.LENGTH_LONG 可选,最后记得调用 show()方
法将 Toast 显示出来。
3、事件处理
这里主要用到的事件处理方法一共三个,一个是 ImageView的点击事件,mImage.setOnClickListener(),一个是 Button的单击事件,mButton.setOnClickListener(),一个是 RadioGroup 的切换事件,mRadioGroup.setOnCheckedChangeListener(),它们的作用从命名上可以很容易看出来。
然后像这样添加参数:
把触发事件的逻辑写在onClick中就可以了。
4、简单对话框的使用
Android 中最基本的对话框是 AlertDialog,之所以说它最简单,是因为布局和使用的方法都很简单,布局是写好的,标题,通过 setTitle()方法设置,图标,通过 setIcon()方法设置,显示在中间的主要信息,通过setMessage()方法显示,等等。显示一个 AlertDialog 的基本步骤如下:
1、创建AlertDialog.Builder对象
2、调用上面的方法进行设置
3、 如果需要设置取消按钮,方法如下:类似的确定按钮是setPositiveButton
4、 调用 AlertDialog.Builder的 create()方法创建 AlertDialog 对象,再调用 AlertDialog 对象的 show()方法将对话框显示出来。
5、 要想增加像列表那样的一行行信息,可以用setItem()来弄。
5、Snackbar
Google在 2015年的 IO 大会上发布了较之前更为详细的 Material Design 规范和全新的Android DesignSupport Library,Snackbar 就是其中的一个控件,可以用来代替 Toast 信息,除了用户体验更好以外,功能也更强大。先来看一下语法:
make 方法中的三个参数分别是根布局,要显示的消息和时长,这个方法是必须的,之后的方法都不是必须的。定义完之后调用 show()方法就可以显示 Snackbar 了。
setAction 方法使该 Snackbar右侧按钮可以被点击并处理一些事件,两个参数分别是按钮显示的文本以及处理点击事件的逻辑,形式与 Button 一样。
setActionTextColor()是设置右侧按钮文本的颜色,setDuration()方法可以定义 Snackbar 弹出时间长度,单位为 ms,当右侧按钮被点击之后,Snackbar 会立刻消失。
静态的 Snackbar 如下图:
6、TextInputLayout
TextInputLayout 也是 Android DesignSupport Library中的一个控件,用于接受用户输入,与 EditText 配合使用有更好的用户体验, TextInputLayout 集合了输入提示,报错等功能,并且自带动画效果。下面来看一下怎么实现:首先是 xml 布局: 输入TextInputLayout就会自动补全
一个 TextInputLayout 中只能包含一个 EditText,如果想要在预览中看到 TextInputLayout 布局的话,需要在修改对应的 build.gradle 文件中的配置:
然后Sync Now
在代码中像普通部件那样引用TextInputLayout,然后从它引用包含的EditText:
还可以设置提示信息:
在需要关闭提示时用setErrorEnabled(false)就可以了
第一个TextInputLayout 是默认被选中的,但是要想设置所有的都不被选中,就要设置父组件可以被选中,就是在它的父组件中加属性:
代码:
MainActivity.java
package com.example.administrator.lab2;import android.content.DialogInterface;import android.content.Intent;import android.support.design.widget.Snackbar;import android.support.design.widget.TextInputLayout;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.RadioGroup;import android.widget.Toast;import static android.widget.RadioGroup.*;public class MainActivity extends AppCompatActivity { private ImageView sysu; private RadioGroup RBGroup; private Button reg; private Button log; private TextInputLayout sid; private TextInputLayout pas; private void RadioClick(RadioGroup RBG) { RBG.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, final int checkedId) { final String m; if(checkedId==R.id.id1) { m="您选择了学生"; }else { m="您选择了教职工"; } Snackbar.make(group,m,Snackbar.LENGTH_SHORT) .setAction("确定",new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this,"Snackbar的确定按钮被点击了",Toast.LENGTH_SHORT) .show(); } }) .setActionTextColor(getResources().getColor(R.color.colorPrimary)) .setDuration(5000) .show(); } }); } private void ImageClick(ImageView ima) { final String[] items={"拍摄","从相册选择"}; final AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); alertDialog.setTitle("上传头像").setItems(items,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface,int i) { Toast.makeText(MainActivity.this,"您选择了["+items[i]+"]",Toast.LENGTH_SHORT).show(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface,int i) { Toast.makeText(MainActivity.this,"您选择了[取消]",Toast.LENGTH_SHORT).show(); } }).create(); ima.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { alertDialog.show(); } }); } private void init() { sysu=(ImageView) findViewById(R.id.sysuimag); ImageClick(sysu); RBGroup=(RadioGroup) findViewById(R.id.id0); RadioClick(RBGroup); reg=(Button) findViewById(R.id.regist); log=(Button) findViewById(R.id.signn); sid=(TextInputLayout) findViewById(R.id.studid); pas=(TextInputLayout)findViewById(R.id.pasword); reg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final String m; if(RBGroup.getCheckedRadioButtonId()==R.id.id1) { m="学生注册功能尚未启用"; } else { m="教职工注册功能尚未启用"; } Snackbar.make(view,m,Snackbar.LENGTH_SHORT) .setAction("确定",new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this,"Snackbar的确定按钮被点击了",Toast.LENGTH_SHORT) .show(); } }) .setActionTextColor(getResources().getColor(R.color.colorPrimary)) .setDuration(5000) .show(); //Intent mIntent=new Intent(MainActivity.this,Activity2.class); //startActivity(mIntent); } }); log.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(sid.getEditText().getText().toString().length()==0) { sid.setError("学号不能为空"); pas.setErrorEnabled(false); }else if(pas.getEditText().getText().toString().length()==0){ pas.setError("密码不能为空"); sid.setErrorEnabled(false); } else { sid.setErrorEnabled(false); pas.setErrorEnabled(false); final String m; if(sid.getEditText().getText().toString().equals("123456") &&pas.getEditText().getText().toString().equals("6666")) { m="登陆成功"; }else{ m="学号或密码错误"; } Snackbar.make(view,m,Snackbar.LENGTH_SHORT) .setAction("确定",new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this,"Snackbar的确定按钮被点击了",Toast.LENGTH_SHORT) .show(); } }) .setActionTextColor(getResources().getColor(R.color.colorPrimary)) .setDuration(5000) .show(); } } }); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:focusableInTouchMode="true" tools:context="com.example.administrator.lab2.MainActivity"> <TextView android:id="@+id/titl" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="中山大学学生信息系统" android:textSize="20sp" android:textColor="@color/primary_black" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="20dp"/> <ImageView android:id="@+id/sysuimag" android:layout_width="120dp" android:layout_height="120dp" android:src="@mipmap/sysu" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/titl" android:layout_marginTop="20dp" /> <android.support.design.widget.TextInputLayout android:id="@+id/studid" android:layout_width="330dp" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@+id/sysuimag" app:layout_constraintRight_toRightOf="parent" app:layout_constraintLeft_toLeftOf="parent" android:layout_marginTop="20dp" > <EditText android:id="@+id/studid1" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:hint="请输入学号" android:textColor="@color/primary_black" android:textSize="18sp" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:id="@+id/pasword" android:layout_width="330dp" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@+id/studid" app:layout_constraintRight_toRightOf="parent" app:layout_constraintLeft_toLeftOf="parent" android:layout_marginTop="20dp" > <EditText android:id="@+id/pasword1" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="请输入密码" android:textColor="@color/primary_black" android:textSize="18sp" /> </android.support.design.widget.TextInputLayout> <RadioGroup android:id="@+id/id0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/pasword" android:layout_marginTop="20dp" > <RadioButton android:id="@+id/id1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="学生" android:textSize="18sp" /> <RadioButton android:id="@+id/id2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" app:layout_constraintLeft_toRightOf="@id/id1" android:layout_marginLeft="10dp" android:text="教职工"/> </RadioGroup> <RadioGroup android:id="@+id/buttonG" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/id0" android:layout_marginTop="20dp" > <Button android:id="@+id/signn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:background="@drawable/buttonbg" android:textColor="@color/primary_white" android:text="登陆"/> <Button android:id="@+id/regist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" app:layout_constraintLeft_toRightOf="@id/signn" android:layout_marginLeft="10dp" android:background="@drawable/buttonbg" android:textColor="@color/primary_white" android:text="注册"/> </RadioGroup></android.support.constraint.ConstraintLayout>
- 安卓开发(3):事件处理
- 安卓开发3—事件处理机制
- 安卓开发基础--打招呼(事件的简单处理)
- 安卓事件处理
- 安卓事件处理
- 安卓基础开发两种点击事件处理方式
- 安卓事件处理2
- 安卓事件处理机制
- 安卓的事件处理
- 安卓基于监听事件处理(一)
- 安卓基于回调的事件处理(一)
- 安卓基础学习_Android事件处理
- 安卓应用的事件处理
- 安卓的事件处理机制
- 安卓事件传递及处理
- 安卓按键事件分发处理机制
- 安卓的双击事件处理
- 14天学会安卓开发(第三天)UI事件处理与布局管理
- kotlin说:老兄(Swift)我们一起打江山!
- 开源 SQL 语法转换 中间件
- eclipse不支持tomcat8.0版本解决
- 初识View-TWO
- jquery使用ajax
- 安卓开发(3):事件处理
- vue组件中的样式属性--scoped
- [LTE] 接入层与非接入层
- 数据分析(6)-性能评价与算法基础
- RetrofitAndAxJavaAndMVP二次封装
- Lectra.DesignConcept.3D.v3R1c.Multilanguage-ISO 2CD(软装饰设计软件)
- JDK_INSTALL
- 十大渗透测试演练系统
- mac终端命令,adb,svn命令总结