携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
认真读完这800字,你可以学会开发下面这个App:猜谜语,答对了,出表情包。
一、我讲
今天,我先讲一下控件的监听器Listener
,然后重点说一下输入框EditText
的使用。
1.1 监听器 Listener
交通违章的摄像头,你一压线,它就拍上了。判定原理可能不一样,有的是先拍照再检测,也有的是检测到你违章了才拍。不管怎样,只要有了这个行为,它总能通过各种方法知道。
这可以叫监听器,它总是盯着一件事情。
同样,我们也可以给App中的各种控件,比如按钮,配备一个监听器。
一旦按钮被按下,监听器就能收到消息,然后,再去做一些可以描述的事情。
1.2 输入框EditText和它的监听器
Android中支持用户输入的控件叫EditText
,来看一下它在xml
中的定义:
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
/>
其中有个inputType
属性,那是输入类型,可以对输入进行过滤,就像是html
中input
标签的type
属性。
一旦设置了,比如number
属性,那么弹出来的键盘只有数字,你输不了别的玩意儿。
除此之外,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:变化后的文本
}
});
这个监听器会关注输入框内容的变化,它会详细记录变化之前,变化之中,变化之后,哪里变化了,由什么变为什么,这些都会在对应方法里返回数据,如上代码注释所描述。
二、你做
要做的是猜谜语的小功能:
还是使用新建的项目,layout
文件夹下的xml
管视图,java
文件下的Activity
管逻辑。
这次还多了一个图片,稍微学习一下这个控件。
2.1 资源文件(图片)
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ok"/>
需要借机引入的是,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天可入门安卓。