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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540799.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch:检索增强生成背后的重要思想

作者&#xff1a;来自 Elastic Jessica L. Moszkowicz 星期天晚上 10 点&#xff0c;我九年级的女儿哭着冲进我的房间。她说她对代数一无所知&#xff0c;注定要失败。我进入超级妈妈模式&#xff0c;却发现我一点高中数学知识都不记得了。于是&#xff0c;我做了任何一位超级妈…

Java servlet《网吧机房管理系统浅析》

网吧机房管理系统在网吧运营中起着至关重要的作用。 对于用户而言&#xff0c;该系统提供了便捷的登录方式&#xff0c;通过用户名和密码可准确显示所在网吧机房号&#xff0c;便于快速定位。同时&#xff0c;合理的机房分配功能确保用户获得良好上网体验。遇到问题时&#xff…

两栏布局和三栏布局的实现方法

两栏布局 右侧不设置宽&#xff0c;实现一栏自适应。 1. float margin-left 左侧设置float&#xff0c;且设置宽度&#xff0c;右侧margin-left为左侧的宽度 <head><style>.left{width: 300px;height: 500px;background-color: palegreen;float: left;}.right…

AI 基础设施:构建AI时代全栈云计算体系

生成式AI 新时代下催生新的基础设施需求 随着企业在数字化转型之路上越走越远&#xff0c;期间一场新的技术革命正在发生&#xff0c;近几年涌现的生成式AI技术正在迅速改变科技、商业和整个社会的格局。这种强大的技术能够从数据中学习并生成预测性输出&#xff0c;生成式 AI …

使用chatgpt降低论文重复率的方法和需要注意的一些细节

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 要降低论文的重复率&#xff0c;可以借助ChatGPT进行多种方式的优化。以下是几种策略&#xff1a; 1. 重写段落或句子&#xff1a; 输入你认为可能重复率较高的段落或句子&#xff0c;…

前端JavaScript导出excel,并用excel分析数据,使用SheetJS导出excel

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f…

Windows通过网线传文件

文章目录 网线网络中看不到另一台计算机Nginx参考文献 网线 两台电脑用网线连接 电脑A 控制面板\网络和 Internet\网络和共享中心 → 更改适配器设置 → 右键以太网&#xff08;未识别的网络&#xff09; → 属性 → Internet 协议版本 4 (TCP/IPv4) 属性 → 使用下面的 IP …

SQL编程题复习(24/9/19)

练习题 x25 10-145 查询S001学生选修而S003学生未选修的课程&#xff08;MSSQL&#xff09;10-146 检索出 sc表中至少选修了’C001’与’C002’课程的学生学号10-147 查询平均分高于60分的课程&#xff08;MSSQL&#xff09;10-148 检索C002号课程的成绩最高的二人学号&#xf…

en造数据结构与算法C# 群组行为优化 和 头鸟控制

实现&#xff1a; 1.给鸟类随机播放随机动画使得每一只鸟扇翅膀的频率都不尽相同 2.可以自行添加权重&#xff0c;并在最后 sumForce separationForce cohesionForce alignmentForce;分别乘上相应权重&#xff0c;这样鸟就能快速飞行和转向辣 using System.Collections.Ge…

小程序地图展示poi帖子点击可跳转

小程序地图展示poi帖子点击可跳转 是类似于小红书地图功能的需求 缺点 一个帖子只能有一个点击事件&#xff0c;不适合太复杂的功能&#xff0c;因为一个markers只有一个回调回调中只有markerId可以使用。 需求介绍 页面有地图入口&#xff0c;点开可打开地图界面地图上展…

安全热点问题

安全热点问题 1.DDOS2.补丁管理3.堡垒机管理4.加密机管理 1.DDOS 分布式拒绝服务攻击&#xff0c;是指黑客通过控制由多个肉鸡或服务器组成的僵尸网络&#xff0c;向目标发送大量看似合法的请求&#xff0c;从而占用大量网络资源使网络瘫痪&#xff0c;阻止用户对网络资源的正…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第六集:制作小骑士完整的跳跃落地行为

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作一个完整的小骑士跳跃落地行为 1.制作动画以及UNITY编辑器编辑2.使用代码实现完整的跳跃落地行为控制3.更多要考虑到的点总结 前言 大家好久不见&…

基于MTL的多任务视频推荐系统

多任务学习&#xff0c;也就是MTL(Multi-task Learning)&#xff0c;现在已经被用在很多领域了&#xff0c;比如处理自然语言、搞计算机视觉&#xff0c;还有语音识别这些领域。MTL在大规模的推荐系统里也玩得挺溜&#xff0c;尤其是那些做视频推荐的大家伙。 MTL的玩法就是&a…

NLP 主要语言模型分类

文章目录 ngram自回归语言模型TransformerGPTBERT&#xff08;2018年提出&#xff09;基于 Transformer 架构的预训练模型特点应用基于 transformer&#xff08;2017年提出&#xff0c;attention is all you need&#xff09;堆叠层数与原transformer 的差异bert transformer 层…

浅谈穷举法

穷举法 穷举法是一种通过逐一列举所有可能情况来寻找解决方案的方法。就像找到一把钥匙打开一把锁&#xff0c;我们会尝试每一把钥匙直到找到正确的那一把。比如&#xff0c;如果你忘记了自己的密码&#xff0c;可以尝试每一种可能的组合直到找到正确的密码为止 穷举法的结构 …

【Python】快速判断两个commit 是否存在cherry-pick 关系

判断两个提交是否有 cherry-pick 关系的 Python 脚本&#xff0c;可以基于以下三种常见情况进行优化&#xff1a; Commit Hash 一致&#xff1a;如果两个提交的 hash 完全相同&#xff0c;那么它们是相同的提交。 Commit Title 存在关联&#xff1a;如果两个提交的 commit mes…

如何下载ComfyUI开发版

看B站视频&#xff0c;见用绘世可以下载ComfyUI开发版&#xff0c;而我又不想在电脑里放太多东西&#xff0c;于是研究了一下&#xff0c;如何直接从GitHub网站下载。具体步骤看图示。 看压缩包内容&#xff0c;应该直接解压覆盖就可以了&#xff0c;暂未有时间测试。

科研绘图系列:R语言散点图和小提琴图(scatter plot violin plot)

文章目录 介绍加载R包导入数据数据预处理函数画图系统信息介绍 提取模型的结果并对模型的结果进行可视化。 加载R包 library(ggplot2) library(ggridges) library(patchwork) library(party) library(caret) library(dplyr

堆的向下调整算法和TOPK问题

目录 1.什么是堆&#xff1f; 1.1 向下调整建堆的时间复杂度计算 1.2 堆的结构体设计 2.堆的功能实现&#xff1a; 2.1 堆的插入&#xff1a; 2.2 堆的删除&#xff1a; 2.3 堆排序&#xff1a; 2.4 向下调整建堆&#xff1a; 2.5 TOPK问题&#xff1a; 2.6 向上调整算…