1 实验名称
简单文本编辑器
2 实验目的
掌握基本布局管理器的使用方法和基本控件的使用方法,以及事件监听处理的使用方法
3 实验源代码
布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:id="@+id/tv_test"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="明年的考研形势严峻!"android:textSize="24sp"android:layout_gravity="center_horizontal"android:layout_marginTop="20dp"/><TableLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"><TableRowandroid:layout_marginLeft="20dp"><TextViewandroid:text="大小"android:textSize="20sp"/><Buttonandroid:id="@+id/btn_bigger"android:text="增大"/><Buttonandroid:id="@+id/btn_smaller"android:text="减小"/></TableRow><TableRowandroid:layout_marginLeft="20dp"><TextViewandroid:text="颜色"android:textSize="20sp"/><Buttonandroid:id="@+id/btn_red"android:text="红色"/><Buttonandroid:id="@+id/btn_green"android:text="绿色"/><Buttonandroid:id="@+id/btn_blue"android:text="蓝色"/></TableRow><TableRowandroid:layout_marginLeft="20dp"><TextViewandroid:text="样式"android:textSize="20sp"/><Buttonandroid:id="@+id/btn_bold"android:text="粗体"/><Buttonandroid:id="@+id/btn_italic"android:text="斜体"/><Buttonandroid:id="@+id/btn_default"android:text="默认"/></TableRow><TableRow><TextViewandroid:text="内容"android:textSize="20sp"/><EditTextandroid:id="@+id/et_content"/></TableRow></TableLayout></LinearLayout>
Java代码:
(1)MainActivity:
package com.example.editordemo;import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {private TextView tv_test = null;private Button btn_bigger = null;private Button btn_smaller = null;private Button btn_red = null;private Button btn_green = null;private Button btn_blue = null;private Button btn_bold = null;private Button btn_italic = null;private Button btn_default = null;private EditText et_content = null;private BtnSizeListener btnSizeListener = null;//定义监听大小的按钮监听器的对象private StyleListener styleListener = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通过R文件中的布局文件中的各个控件的id号将Activity类中的声明的各个控件创建出来tv_test = findViewById(R.id.tv_test);btn_bigger = findViewById(R.id.btn_bigger);btn_smaller = findViewById(R.id.btn_smaller);btn_red = findViewById(R.id.btn_red);btn_green = findViewById(R.id.btn_green);btn_blue = findViewById(R.id.btn_blue);btn_bold = findViewById(R.id.btn_bold);btn_italic = findViewById(R.id.btn_italic);btn_default = findViewById(R.id.btn_default);et_content = findViewById(R.id.et_content);et_content.setOnEditorActionListener(new TextView.OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {tv_test.setText(et_content.getText().toString());return false;}});//创建监听器的对象btnSizeListener = new BtnSizeListener();styleListener = new StyleListener();//创建样式的监听器对象styleListener.setTv_test(tv_test);//将mainActivity中的tv_test对象传递给styleListenerbtn_bold.setOnClickListener(styleListener);btn_italic.setOnClickListener(styleListener);btn_default.setOnClickListener(styleListener);//将事件源对象跟监听器对象绑定btn_bigger.setOnClickListener(btnSizeListener);btn_smaller.setOnClickListener(btnSizeListener);btn_red.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {tv_test.setTextColor(Color.RED);}});btn_green.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {tv_test.setTextColor(Color.GREEN);}});btn_blue.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {tv_test.setTextColor(Color.BLUE);}});tv_test.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("请输入新的内容");builder.setIcon(R.mipmap.ic_launcher);final EditText et_content = new EditText(MainActivity.this);builder.setView(et_content);//将et_content对象放到对话框中builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {tv_test.setText(et_content.getText().toString().trim());//}});builder.setNegativeButton("取消",null);builder.create().show();//让构建器调用create方法将对话框创建出来,并调用show方法显示对话框return false;}});}//定义监听大小的监听器类private class BtnSizeListener implements View.OnClickListener{@Overridepublic void onClick(View v) {float textSize = tv_test.getTextSize();//得到当前tv_test文本框中字体大小值if (v.getId()==R.id.btn_bigger){//让tv_test中的文字变大textSize = textSize+2;tv_test.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);}else if (v.getId()==R.id.btn_smaller){让tv_test中的文字变小textSize = textSize-2;tv_test.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);}}}
}
(2)StyleListener:
package com.example.editordemo;import android.graphics.Typeface;
import android.view.View;
import android.widget.TextView;public class StyleListener implements View.OnClickListener {private TextView tv_test = null;int flag = 0;//0表示默认样式,1表示粗体样式,2表示斜体样式,3表示粗斜体样式public void setTv_test(TextView tv_test) {this.tv_test = tv_test;}@Overridepublic void onClick(View v) {Typeface typeface = tv_test.getTypeface();if (v.getId()==R.id.btn_bold){if (flag == 2){tv_test.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);//设置字体样式为粗斜体flag = 3;//将样式标志变量设置为3粗斜体}else {tv_test.setTypeface(Typeface.MONOSPACE,Typeface.BOLD);//设置字体样式为粗体flag = 1;//将样式标志变量设置为1粗体}}else if (v.getId()==R.id.btn_italic){if (flag == 1){tv_test.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);//设置字体样式为粗斜体flag = 3;//将样式标志变量设置为3粗斜体}else {tv_test.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);//设置字体样式为斜体flag = 2;//将样式标志变量设置为2斜体}}else if (v.getId()==R.id.btn_default) {tv_test.setTypeface(Typeface.DEFAULT);flag = 0;}}
}
4 实验运行结果图
5 总结
先写布局文件,首先是一个文本框,内容自定义;然后添加一个表格布局,表格里面分三行,每行的布局都由文本框和按钮组成,三行分别设置为大小、颜色、样式;接下来一行设置了一个文本编辑框,是输入的内容。
写完布局文件,开始写Java代码,通过R文件中的布局文件中的各个控件的id号将类在的声明的各个控件创建出来;然后创建监听大小的监听器和样式监听器的对象,同时将mainActivity中的tv_test对象传递给styleListener,接着将事件源对象和监听器对象绑定。
在写Java代码的过程中,在定义监听大小的监听器类程序编写时,一开始采用了case/switch语句来实现文字的变大变小,但是此时却出现了报错,上网查找原因知道了是因为新版本的Android Studio不支持这种写法,所以我将其改写为if else语句,然后就成功运行出来啦!