一、事件监听(三种写法)
1、标签上直接绑定监听方法
2、创建监听器对象,组件再绑定监听器对象
3、 使用匿名内部类并定义成全局的属性
二、文本框(TextView)
1、简介
TextView直接继承View,作用就是在界面上显示文本(类似于Swing中的JLabel),同时它还是EditText、Button两个UI组件类的父类。
另外Android关闭了它的文字编辑功能,如果想编辑内容,则可以使用EditText。
2、常用属性
<1>字体风格粗体、斜体:
①text
② autoLink
③ singleLine(已过时,现在应为:android:lines)
④ lines
⑤ minLines
⑥textColor
⑦ textSize
⑧ textStyle
<2> 设置背景,可以是颜色或图片:backgroud
<3>设置文本的icon:drawableXX
<4>ellipsize 当文字长度超过textview宽度时的显示方式
android:ellipsize=“start” 省略号显示在开头 “…pedia”
android:ellipsize=“end” 省略号显示在结尾 “encyc…”
android:ellipsize=“middle” 省略号显示在中间 “en…dia”
android:ellipsize=“marquee” 以横向滚动方式显示(另外还需要设置其它三个属性,否则不滚动,即必须让该控件获得焦点)
三、常用编辑框
1、简介
EditText和TextView非常相似,它与TextView共用了绝大总分XML属性和文法,
二者最大区别在于:EditText可以接受用户输入。
2、常用属性
① inputType
它是EditText组件最重要的属性,它相当于HTML中标签的type属性,用于EditText指定输入组件的类型。
常用取值有:number|numberPassword|date|phone
②hint:提示字符信息
四、椭圆形、背景渐变的文本框
1、Android资源
指在res文件夹下的xml文件,每一种类型的xml文件都对应了一种资源。
例如:外形资源(shape)、尺寸资源(dimension)、颜色资源(color)等
2、尺寸资源和颜色资源放res/values目录下
3 、*.xml(文本框的外形资源)可放到drawable目录下
4 、设置渐变色与背景色只能取其一,后面会覆盖前面的
五、根据获得/失去焦点边框变色编辑框
1、选择器
①作用:根据控件状态显示不同样式
② Item: 指定不同状态下控件显示哪个样式
计算机:xml布局
<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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="wrap_content"
android:orientation="horizontal"
android:rowCount="8"
android:columnCount="4"
tools:context=".MainActivity">
<EditText
android:id="@+id/input"
android:layout_rowSpan="4"
android:layout_gravity="fill"
android:hint="显示计算"/>
<EditText
android:id="@+id/output"
android:layout_columnSpan="4"
android:layout_gravity="fill"
android:hint="显示结果"
/>
<Button android:id="@+id/one"
android:text="1"/>
<Button
android:id="@+id/two"
android:text="2"/>
<Button
android:id="@+id/three"
android:text="3"/>
<Button
android:id="@+id/clear"
android:text="clear"/>
<Button
android:id="@+id/four"
android:text="4"/>
<Button
android:id="@+id/five"
android:text="5"/>
<Button
android:id="@+id/six"
android:text="6"/>
<Button
android:id="@+id/devide"
android:text="/"/>
<Button
android:id="@+id/seven"
android:text="7"/>
<Button
android:id="@+id/eight"
android:text="8"/>
<Button
android:id="@+id/nine"
android:text="9"/>
<Button
android:id="@+id/multiply"
android:text="×"/>
<Button
android:id="@+id/zero"
android:layout_gravity="fill"
android:text="0"/>
<Button
android:id="@+id/xs"
android:layout_gravity="fill"
android:text="."/>
<Button
android:id="@+id/minus"
android:text="-"/>
<Button
android:id="@+id/plus"
android:layout_rowSpan="3"
android:layout_gravity="fill_vertical"
android:text="+"/>
<Button
android:id="@+id/result"
android:layout_columnSpan="3"
android:layout_gravity="fill"
android:text="="/>
</GridLayout>
MainActiviti.JAVA
package com.example.t2123;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
// 结果集
private EditText editText;
//数字1-9
private Button main_btn1;
private Button main_btn2;
private Button main_btn3;
private Button main_btn4;
private Button main_btn5;
private Button main_btn6;
private Button main_btn7;
private Button main_btn8;
private Button main_btn9;
private Button main_btn0;
//运算符
private Button main_btn1a ;// +
private Button main_btnj; // -
private Button main_btnx; // *
private Button main_btnc; // /
private Button main_btnd; //小数点
private Button main_btn1d; //=
//清除
private Button clear;
boolean clear_flag;//清空标识
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//数字1-9
View main_btn1 = findViewById(R.id.one);
View main_btn2 = findViewById(R.id.two);
View main_btn3= findViewById(R.id.three);
View main_btn4 = findViewById(R.id.four);
View main_btn5 = findViewById(R.id.five);
View main_btn6 = findViewById(R.id.six);
View main_btn7 = findViewById(R.id.seven);
View main_btn8 = findViewById(R.id.eight);
View main_btn9 = findViewById(R.id.nine);
View main_btn0 = findViewById(R.id.zero);
//运算符
View main_btn1a = findViewById(R.id.plus);// +
View main_btnj = findViewById(R.id.minus);// -
View main_btnx = findViewById(R.id.multiply);// *
View main_btnc = findViewById(R.id.devide); // /
View main_btnd = findViewById(R.id.clear);//小数点
View main_btn1d = findViewById(R.id.result);//=
View main_btndel = findViewById(R.id.clear);//清空
editText = (EditText) findViewById(R.id.output);//结果集
//添加点击事件
main_btn0.setOnClickListener(this);
main_btn1.setOnClickListener(this);
main_btn2.setOnClickListener(this);
main_btn3.setOnClickListener(this);
main_btn4.setOnClickListener(this);
main_btn5.setOnClickListener(this);
main_btn6.setOnClickListener(this);
main_btn7.setOnClickListener(this);
main_btn8.setOnClickListener(this);
main_btn9.setOnClickListener(this);
main_btnd.setOnClickListener(this);
main_btndel.setOnClickListener(this);
main_btn1a.setOnClickListener(this);
main_btnj.setOnClickListener(this);
main_btnx.setOnClickListener(this);
main_btnc.setOnClickListener(this);
main_btn1d.setOnClickListener(this);
}
//读取每个按钮的点击的内容
@Override
public void onClick(View view) {
//获取文本内容
String input = editText.getText().toString();
switch (view.getId()){
case R.id.zero:
case R.id.one:
case R.id.two:
case R.id.three:
case R.id.four:
case R.id.five:
case R.id.six:
case R.id.seven:
case R.id.eight:
case R.id.nine:
case R.id.xs:
if(clear_flag){
clear_flag = false;
editText.setText("");//赋值为空
}
editText.setText(input + ((Button)view).getText());//结果集就为本身
break;
case R.id.plus:
case R.id.minus:
case R.id.multiply:
case R.id.devide:
if(clear_flag){
clear_flag = false;
input = "";
editText.setText("");
}
editText.setText(input + " " + ((Button)view).getText() + " ");
break;
case R.id.clear:
if(clear_flag){
clear_flag = false;
input = "";
editText.setText("");
}else if(input != null || !input.equals("")) {//如果获取到的内容为空
editText.setText(input.substring(0, input.length() - 1));//结果集为空
}
break;
case R.id.result://运算结果 =
getResult();//调用处理结果集的方法
break;
}
}
//运算结果的方法
private void getResult(){
String exp = editText.getText().toString();//获取文本框的内容
if(exp==null||exp.equals("")){
return;
}
if(!exp.contains(" ")){
return;
}
if(clear_flag){
clear_flag = false;
return;
}
clear_flag = true;
double result = 0;
//进行截取
//运算符前的数字
String s1 = exp.substring(0,exp.indexOf(" "));
//运算符
String op = exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);
//运算符后的数字
String s2 = exp.substring(exp.indexOf(" ")+3);
if(!s1.equals("")&&!s2.equals("")) {//如果包含小数点的运算
double d1 = Double.parseDouble(s1);//则数字都是double类型
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {//如果是 +
result = d1 + d2;
} else if (op.equals("-")) {
result = d1 - d2;
} else if (op.equals("X")) {
result = d1 * d2;
} else if (op.equals("/")) {
if (d2 == 0) { //如果被除数是0
result = 0; //则结果是0
}
else {//否则执行正常是除法运算
result = d1 / d2;
}
}
if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {//如果是整数类型
int r = (int) result; //都是整形
editText.setText(r + "");
} else{
editText.setText(result + "");
}
}else if(!s1.equals("") && s2.equals("")){//如果是只输入运算符前的数
editText.setText(exp);//直接返回当前文本框的内容
}else if(s1.equals("") && !s2.equals("")){//如果是只输入运算符后面的数
double d2 = Double.parseDouble(s2);
//运算符前没有输入数字
if (op.equals("+")) {
result = 0 + d2;
} else if (op.equals("-")) {
result = 0 - d2;
} else if (op.equals("*")) {
result = 0;
} else if (op.equals("/")) {
result = 0;
}
if (!s1.contains(".") && !s2.contains(".")) {
int r = (int) result;
editText.setText(r + "");
} else{
editText.setText(result + "");
}
}else {
editText.setText("");
}
}
}