Java转Android:第3天 监听器实现猜谜语App

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情


认真读完这800字,你可以学会开发下面这个App:猜谜语,答对了,出表情包。

image7.GIF

一、我讲

今天,我先讲一下控件的监听器Listener,然后重点说一下输入框EditText的使用。

1.1 监听器 Listener

交通违章的摄像头,你一压线,它就拍上了。判定原理可能不一样,有的是先拍照再检测,也有的是检测到你违章了才拍。不管怎样,只要有了这个行为,它总能通过各种方法知道。

这可以叫监听器,它总是盯着一件事情。

image.png

同样,我们也可以给App中的各种控件,比如按钮,配备一个监听器。

一旦按钮被按下,监听器就能收到消息,然后,再去做一些可以描述的事情。

image.png

1.2 输入框EditText和它的监听器

Android中支持用户输入的控件叫EditText,来看一下它在xml中的定义:

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    />

image.png

其中有个inputType属性,那是输入类型,可以对输入进行过滤,就像是htmlinput标签的type属性。

一旦设置了,比如number属性,那么弹出来的键盘只有数字,你输不了别的玩意儿。

image.png

除此之外,EditText还拥有一个监听器,叫TextChangedListener,用于监听输入内容的变化。

editText.addTextChangedListener(new TextWatcher() {

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // 文本变化之前,s:变化前的文本
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
            // 文本变化之后,s:改变后的文本
    }

    @Override
    public void afterTextChanged(Editable s) {
            // 文本变化之后,s:变化后的文本
    }
});

这个监听器会关注输入框内容的变化,它会详细记录变化之前,变化之中,变化之后,哪里变化了,由什么变为什么,这些都会在对应方法里返回数据,如上代码注释所描述。

二、你做

要做的是猜谜语的小功能:

image7.GIF

还是使用新建的项目,layout文件夹下的xml管视图,java文件下的Activity管逻辑。

image.png

这次还多了一个图片,稍微学习一下这个控件。

2.1 资源文件(图片)

<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@mipmap/ok"/>

image.png

需要借机引入的是,Android的图片资源放在res目录下的mipmap文件里。

所以,你要把表情包图片ok.png复制到mipmap下,让srcCompat="@mipmap/ok"引用。

2.2 布局和逻辑

总体的activity_main.xml布局是这样的:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="千条线,万条线,落到水里都不见"
        android:textSize="20sp" />
    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:hint="请输入谜底"
        app:layout_constraintTop_toBottomOf="@+id/textView2"/>
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/editText"
        app:srcCompat="@mipmap/ok"/>
</android.support.constraint.ConstraintLayout>

控制逻辑的MainActivity.java是这样的:

public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);
        imageView.setVisibility(View.GONE);
        editText = findViewById(R.id.editText);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.toString().contains("rain")){
                    imageView.setVisibility(View.VISIBLE);
                }
            }
        });
    }
    
}

这段代码简单到我无话可说。

最后,点击顶部的Run图标,选择模拟器,程序就跑起来了。

三、关于

现在,行业内多是Android转Java,很少有Java转Android的。

但是,这并不妨碍Java同学了解Android开发,从学习的角度去拓宽自己的知识面。

所以,我会以最精简的语言来编写一个系列教程《Java转Android》(第一季30篇,日更)。

其实,不管是Java还是python,只要有编程基础的同学,一天看800字,30天可入门安卓。

猜你喜欢

转载自juejin.im/post/7127424576358711327