安卓第5次课:常用控件01 TextView与EditText(计算机)

一、事件监听(三种写法)
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("");
        }

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43163062/article/details/82656444