前言
这篇文章记录了作者学习Android Studio开发App的心得体会 1。Android Studio提供的最基础的控件是TextView
、ImageView
和Button
,通常TextView
用来显示文本,ImageView
用来显示图片,而Button
用来响应用户的点击。但是TextView
、ImageView
同样有setOnClickListener()
方法,所以可以用TextView
、ImageView
代替Button
,来实现响应用户点击的功能。
现在想要设计一个简单的响应用户点击的界面,从上到下分别是:
TextView
,宽度整个屏幕,高度50%,点击后随机增加聊天内容。ImageView
,宽度整个屏幕,高度50%,点击后有序改变图片内容。
一、布局文件的编写
activity_main.xml
的完整代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline_1"
app:layout_constraintGuide_percent=".50"
android:orientation="horizontal"/>
<TextView
android:id="@+id/tv_bbs"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center"
android:text="点我增加聊天内容。"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/guideline_1" />
<ImageView
android:id="@+id/iv_scale"
android:layout_width="match_parent"
android:layout_height="400dp"
android:src="@color/white"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline_1"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
为了实现百分比布局,可以在ConstraintLayout中采用添加辅助线(Guideline)的方法 2。在这个简单界面中,添加了一条水平辅助线,位于0.50的位置,然后两个控件用辅助线来限制。如图所示:
二、代码文件的编写
MainActivity.java
的完整代码如下:
package com.example.textviewclick;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.*;
import android.view.View;
import android.view.View.*;
import android.text.method.ScrollingMovementMethod;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private ImageView iv_scale;
private TextView tv_bbs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_bbs = findViewById(R.id.tv_bbs);
tv_bbs.setMovementMethod(new ScrollingMovementMethod());
iv_scale = findViewById(R.id.iv_scale);
iv_scale.setOnClickListener(new ClickTAction());
tv_bbs.setOnClickListener(new ClickCAction());
tv_bbs.setOnLongClickListener(new ClickLAction());
}
private class ClickTAction implements OnClickListener {
private int flag = 0;
@Override
public void onClick(View v) {
if (v.getId() == R.id.iv_scale) {
flag = (flag + 1) % 3;
if (flag == 0) {
iv_scale.setImageResource(android.R.color.holo_blue_bright);
} else if (flag == 1) {
iv_scale.setImageResource(android.R.color.holo_red_dark);
} else if (flag == 2) {
iv_scale.setImageResource(android.R.color.holo_green_dark);
}
}
}
}
private final String[] mChatStr = {
"您用餐了吗?",
"今天是个好日子。",
"我赢了!",
"我们去看电影,好吗?",
"我晚上做什么好呢?" };
private class ClickCAction implements OnClickListener {
@Override
public void onClick(View v) {
if (v.getId() == R.id.tv_bbs) {
int r = (int)(Math.random()*10) % 5;
String s = String.format("%s\n%s %s", tv_bbs.getText().toString(), getNowTime(), mChatStr[r]);
tv_bbs.setText(s);
}
}
}
private class ClickLAction implements OnLongClickListener {
@Override
public boolean onLongClick(View v) {
if (v.getId() == R.id.tv_bbs) {
tv_bbs.setText("");
}
return true;
}
}
private String getNowTime() {
SimpleDateFormat s = new SimpleDateFormat("HH:mm:ss");
return s.format(new Date());
}
}
在这里建立了一个TextView
私有变量和一个ImageView
变量,在onCreate()
方法中用findViewById()
方法与上面设计的2个控件对应,然后用setOnClickListener()
方法在控件上绑定点击监听器。
用户在ImageView
上点击改变图片内容采用了setImageResource()
方法3。
总结
以上就是今天要讲的内容,本文简单介绍了Android Studio中TextView
和ImageView
点击响应功能的实现。
欧阳燊. Android Studio开发实战. 清华大学出版社. 2017. ↩︎
(android:点击换图系列一)通过ImageView点击更换图片_今人不见古时月,今月曾经照古人的博客-CSDN博客_imageview更换图片 ↩︎