Android实现Button事件的处理
Android实现Button事件的处理
开发工具:Andorid Studio 1.3
运行环境:Android 4.4 KitKat
代码实现
首先是最基本的线性布局,给每个控件设立id值,以供代码中findViewById使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical" tools:context=".LoginActivity"
android:id="@+id/LinLayoutMain">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editUsername"
android:hint="@string/hint_username"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editPassword"
android:hint="@string/hint_password"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imaBtnSicily"
android:src="@mipmap/state1"
android:background="@color/backgroundWhit"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/reset"
android:text="@string/reset"/>
</LinearLayout>
在界面创建的时候即onCreate的时候,绑定控件到全局变量中
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
linLayoutMain = (LinearLayout)this.findViewById(R.id.LinLayoutMain);
edtUsername = (EditText)this.findViewById(R.id.editUsername);
edtPassword = (EditText)this.findViewById(R.id.editPassword);
imaBtnSicily = (ImageButton)this.findViewById(R.id.imaBtnSicily);
imaBtnSicily.setOnClickListener(SicilyListener);
btnreset = (Button)this.findViewById(R.id.reset);
btnreset.setOnClickListener(ResetListener);
DynamicTextViewCount = 0;
imaBtnSicily.setOnLongClickListener(SicilyLongClickListener);
}
点击图片登陆的时候,用字符串getText().toString()函数得到用户名和密码,然后进一步判断,requestFocus()函数可以让焦点停留在想要的控件中,setImageDrawable()函数可以修改ImageButton中的图片,setVisibility()函数可以设置控件是否可见
View.OnClickListener SicilyListener = new View.OnClickListener(){
@Override
public void onClick(View v){
String username = edtUsername.getText().toString();
String password = edtPassword.getText().toString();
if(username.equals("LeiBusi") && password.equals("Halo3Q")){
imaBtnSicily.setImageDrawable(getResources().getDrawable(R.mipmap.state2));
edtUsername.setVisibility(View.GONE);
edtPassword.setVisibility(View.GONE);
}
else{
imaBtnSicily.setImageDrawable(getResources().getDrawable(R.mipmap.state1));
edtPassword.setText(null);
edtPassword.setHint(R.string.error_pawword);
edtPassword.requestFocus();
}
}
};
长按图片的时候addview()函数可以动态添加控件,在这里我给每个TextView控件进行了一个编号,通过全局变量DynamicTextViewCount来计数。显示效果如上图所示
View.OnLongClickListener SicilyLongClickListener = new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v){
try{
TextView DynamicTextViewTemp = new TextView(LoginActivity.this);
DynamicTextViewTemp.setText("这是动态添加的textView" + " " + Integer.toString(DynamicTextViewCount++));
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
linLayoutMain.addView(DynamicTextViewTemp, layoutParams);
Log.d("Hint", "Enter the try block");
}
catch (Exception e){
Log.d("Hint", "Can't not add TextView by count");
return false;
}
return true;
}
};
清除按钮的功能是短按重置所有内容。这里主要在于对多个或0个TextView控件的删除功能,通过getChildCount()函数获知线性布局中有多少个子元素,通过removeViewAt()函数清除特定的控件
View.OnClickListener ResetListener = new View.OnClickListener(){
@Override
public void onClick(View v){
int childCount = linLayoutMain.getChildCount();
while(DynamicTextViewCount > 0){
linLayoutMain.removeViewAt(childCount - 1);
childCount = linLayoutMain.getChildCount();
DynamicTextViewCount--;
}
imaBtnSicily.setImageDrawable(getResources().getDrawable(R.mipmap.state1));
edtUsername.setText(null);
edtUsername.setHint(R.string.hint_username);
edtUsername.setVisibility(View.VISIBLE);
edtPassword.setText(null);
edtPassword.setHint(R.string.hint_password);
edtPassword.setVisibility(View.VISIBLE);
edtUsername.requestFocus();
}
};
效果图
一些总结
- 字符串匹配相等的问题:在Java语言中,String类型没有对==这个操作符进行重载,但有特定的函数equal函数进行判断是否相等。
- 用户名密码登陆不正确:R.string.right_username这个的实质是一个Int类型的常量,并不是String类型的常量。
- 动态添加按钮只有一个:addView()函数中的控件必须是没被添加过的,因此哪怕是添加相同的按钮,也必须是在局部变量中new出来的一个新控件,函数结束后会被Java回收机制回收,因此每次new出来的都是没被添加过的。
工程下载
传送门:下载
Android实现Button事件的处理的更多相关文章
- 界面跳转+Android Studio Button事件的三种方式
今天学习界面跳转 java类总是不能新建成功 看了网上教程 (20条消息) 关于android studio无法创建类或者接口问题的解决方法_qq_39916160的博客-CSDN博客 可以新建了 但 ...
- Android 添加Button事件
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- Android中Button的五种监听事件
简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...
- Xamarin for android:为button设置click事件的几种方法
原文:Xamarin for android:为button设置click事件的几种方法 在Xamarin中一个最基础的事情,就是为一个button指定click事件处理方法,可是即使是这么一件事也有 ...
- Android开发之Button事件实现方法的总结
下面介绍Button事件实现的两种方法 main.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- Android 触发Button按钮事件的三种方式
1.新创建一个类 2.使用内部类 3.当多个button按钮时,为简化代码而创建的实例listener 贴代码: MainActivity.Java 文件: package com.android. ...
- Android点击事件(click button)的四种写法
在学习android开发和测试的时候发现不同的人对于click事件的写法是不一样的,上网查了一下,发现有四种写法,于是想比较一下四种方法的不同 第一种方法:匿名内部类 代码: package com. ...
- Android studio button 按钮 四种绑定事件的方法
package com.geli_2.sujie.sujiegeili2testbutton; import android.os.Bundle; import android.support.v7. ...
- Android笔记之——事件的发生(2)
Java: package com.example.helloworld;import android.os.Bundle;import android.view.KeyEvent;import an ...
随机推荐
- php 导出csv
public function doworks(){ //输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: appli ...
- JAVA语法细节(1)
1.变量的作用域 变量的作用域从变量定义的位置开始,到变量所在的那对大括号结束.变量定义内存开辟一块空间用于该变量,变量到达作用域时,该变量从内存中消失. 2.变量的数据类型 变量基本数据类型:byt ...
- Tomcat 7优化前及优化后的性能对比
Tomcat 7在我们日常开发.测试.生产环境都会使用到,但对于大部分开发人员来说,对其性能还是没有多大了解.本文就对它做一次性能测试,对比优化前后的性能区别. 一.运行环境 CPU: Intel(R ...
- 响应式Web设计基础
本文所有内容来自Responsive Web Design Fundamentals 手机.大屏手机.平板电脑.桌面电脑.游戏控制台.电视.甚至是可穿戴设备,如此多的设备也形成了多种多样的屏幕尺寸.屏 ...
- 用IKVMC将jar转成dll供c#调用
用IKVMC将jar转成dll供c#调用 ikvmc c# dll jar 用IKVMC将jar转成dll供c#调用 前言 ikvmc介绍 ikvmc下载安装 下载并解压 设置环境变量 jar-> ...
- 一款安卓ShowcaseView视图源码效果
该源码是从源码天堂那边转载过来的,大家可以看看一下吧啊,一款安卓ShowcaseView视图源码效果,非常不错的,特别是在做引导时使用. 源码下载地址:http://code.662p.com/vie ...
- vim 文字插入
我们知道VIM中,普通的复制和粘贴都是YY和PP.那么怎么将vim以外的文件插入到vim编辑器中呢!这是个问题: 首先我们要选中想要插入的文字,如: 然后进入vim插入模式:SHIFT + Inser ...
- 类名 对象名 =new 类名();
类名 对象名 =new 类名();该怎么理解 类名 对象名 =new 类名();=左边:创建一个类的对象=右边:调用这个类的构造函数初始化对象,类名()这个是构造函数,用来做初始化的.
- Js 访问Aspnet后台页面变量
一.普通WebForm页面 <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server ...
- SQLServer中用户 'sa' 登录失败解决办法
今天下午,很奇怪的网站突然就打不开了,报错如下: “/”应用程序中的服务器错误. 用户 'sa' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...