移动技术开发:简单文本编辑器

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">

    <TextView
        android: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"
        />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        >

        <TableRow
            android:layout_marginLeft="20dp"
            >
            <TextView
                android:text="大小"
                android:textSize="20sp"
                />
            <Button
                android:id="@+id/btn_bigger"
                android:text="增大"
                />
            <Button
                android:id="@+id/btn_smaller"
                android:text="减小"
                />
        </TableRow>

        <TableRow
            android:layout_marginLeft="20dp"
            >
            <TextView
                android:text="颜色"
                android:textSize="20sp"
                />
            <Button
                android:id="@+id/btn_red"
                android:text="红色"
                />
            <Button
                android:id="@+id/btn_green"
                android:text="绿色"
                />
            <Button
                android:id="@+id/btn_blue"
                android:text="蓝色"
                />
        </TableRow>

        <TableRow
            android:layout_marginLeft="20dp"
            >
            <TextView
                android:text="样式"
                android:textSize="20sp"
                />
            <Button
                android:id="@+id/btn_bold"
                android:text="粗体"
                />
            <Button
                android:id="@+id/btn_italic"
                android:text="斜体"
                />
            <Button
                android:id="@+id/btn_default"
                android:text="默认"
                />
        </TableRow>

        <TableRow>
            <TextView
                android:text="内容"
                android:textSize="20sp"
                />
            <EditText
                android: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;


    @Override
    protected 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() {
            @Override
            public 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对象传递给styleListener

        btn_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() {
            @Override
            public void onClick(View v) {
                tv_test.setTextColor(Color.RED);
            }
        });

        btn_green.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_test.setTextColor(Color.GREEN);
            }
        });

        btn_blue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_test.setTextColor(Color.BLUE);
            }
        });

        tv_test.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public 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() {
                    @Override
                    public 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{

        @Override
        public 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;
    }

    @Override
    public 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语句,然后就成功运行出来啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茜茜西西CeCe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值