โปรแกรมแก้ไขข้อความที่อุดมไปด้วย
เมื่อพิจารณาว่าการแก้ไขข้อความที่หลากหลายจำเป็นต้องสนับสนุนประเภทข้อความยาวข้อความที่หลากหลายส่วนใหญ่ไม่สามารถนำมุมมองกลับมาใช้ใหม่ได้โดยใช้การแก้ไขเดี่ยวแบบกำหนดเอง ดังนั้นโปรแกรมแก้ไขข้อความที่ใช้งานตาม RecycleView จึงอยู่ในกระบวนการพัฒนา
สำหรับการใช้งานของบรรณาธิการข้อความที่หลากหลายเราจะนึกถึงคุณสมบัติที่จำเป็นหลายประการที่บรรณาธิการที่ใช้งานต้องสนับสนุน:
1. เกี่ยวข้องกับการแสดงผลและการแก้ไขข้อความรูปภาพและรูปแบบข้อความ จำนวนมาก
2. เกี่ยวข้องกับการโต้ตอบของผู้ใช้ ที่ซับซ้อนมาก
ตัวแก้ไขข้อความที่ฉันรู้เกี่ยวกับ GitHub นั้นถูกนำไปใช้โดยทั่วไปตามสองประเภท:
นี่คือความคิดเห็นส่วนตัวเกี่ยวกับโซลูชั่นทั้งสองนี้
ก่อนอื่นข้อเสียอย่างหนึ่งของประสิทธิภาพการแสดงผลของ WebView คือ ประการที่สองเมื่อมันเกี่ยวข้องกับการมีปฏิสัมพันธ์ระหว่างมนุษย์กับคอมพิวเตอร์ที่ซับซ้อนมากมันจะยากที่จะใช้ WebView อีกประเด็นหนึ่งคือความเข้ากันได้ของ WebView ก็เป็นจุดที่ต้องพิจารณา
สำหรับการเขียนใหม่ EditText เดียวมันสามารถปรับขนาดได้มากสำหรับการโต้ตอบการแสดงข้อความและการสนับสนุนสไตล์ อย่างไรก็ตามเมื่อพิจารณาว่าจะมีรูปภาพจำนวนมากสถานการณ์หน่วยความจำจะต้องนำมาพิจารณาที่นี่ สำหรับ EditText ไม่มีการใช้ซ้ำอย่างแน่นอน โดยทั่วไปความทรงจำให้มากที่สุดเท่าที่มีรูปภาพ ในทางกลับกัน TextView พื้นเมืองได้รับการวิพากษ์วิจารณ์เสมอสำหรับการแสดงผลข้อความจำนวนมากและมีวิธีแก้ปัญหามากมายสำหรับการเพิ่มประสิทธิภาพของประสิทธิภาพของ TextView
ดังนั้นฉันจึงเลือกที่จะใช้ Recyclerview เป็นโซลูชันการใช้งานสำหรับการใช้โปรแกรมแก้ไขข้อความที่หลากหลาย แม้ว่าจะมีข้อผิดพลาด แต่ก็เป็นทางออกที่เป็นไปได้เช่นกัน (Editor ของ Douban ถูกนำไปใช้โดยใช้ Recyclerview)
ข้อดี : ก่อนอื่น Recyclervie เป็นองค์ประกอบดั้งเดิมมีประสิทธิภาพที่ดีมากสำหรับการแสดงส่วนประกอบ UI จำนวนมาก ประการที่สองกลไกมัลติเพล็กซ์ของ Recyclerview ให้การสนับสนุนที่ดีสำหรับการควบคุมการใช้หน่วยความจำ
ข้อเสีย :: แน่นอนนี่ไม่ใช่ตัวเลือกแรกสำหรับการใช้งานบรรณาธิการข้อความที่หลากหลาย ฉันได้พบกับข้อผิดพลาดครั้งใหญ่มากมายในกระบวนการดำเนินการ นี่คือบางส่วน:
1. การควบคุมโฟกัส
2. ข้อมูลประกบกัน
3. ที่เก็บสไตล์
4. ตำแหน่งของเคอร์เซอร์
และอีกมากมาย ...
โชคดีที่พบวิธีแก้ปัญหาในที่สุดดังนั้นฉันจะแบ่งปันโซลูชันการใช้งานนี้ที่นี่และจัดหาโซลูชันการใช้งานสำหรับผู้ที่ต้องการ
1. ตัวหนา, ตัวเอียง, ขีดเส้นใต้, midscore, strikethrough, ไฮเปอร์ลิงก์, สไตล์อ้างอิง, H1, H2, H3, H4 ของข้อความ
2. แทรกและลบรูปภาพ
3. เลือกข้อความเพื่อเปลี่ยนสไตล์แบบเรียลไทม์
4. รักษาสไตล์ไว้ในสาย
5. ลบสองบรรทัดเป็นหนึ่งบรรทัดเพื่อรักษาสไตล์
6. แสดงรูปแบบข้อความแบบเรียลไทม์ด้วยเคอร์เซอร์ไปยังแผงควบคุม
7. แทรกสไตล์ที่ตำแหน่งใด ๆ
8. ข้อความแก้ไขขั้นสุดท้ายถูกโอนไปยัง Markdown (มีข้อบกพร่อง ~ ... )
รอ. - -
สำหรับการใช้งาน Recyclerview การดำเนินการที่สอดคล้องกันของการคืนค่าการขนส่งคือการเพิ่มแบบจำลองดังนั้นการห่อสายและการลบกลับของสายการบินต้องใช้การประมวลผลเชิงตรรกะจำนวนมากและยังเกี่ยวข้องกับการประกบและการแบ่งส่วนของดัชนีสไตล์ ในระยะสั้นมันเป็นหลุมใหญ่
หลังจากเลือกคุณจะต้องจัดทำดัชนีเคอร์เซอร์สไตล์ชัดเจนและแยกสไตล์และสร้างใหม่และกำหนดสไตล์ หลุมขนาดใหญ่หลุมขนาดใหญ่
เมื่อเคอร์เซอร์สอดคล้องกับสตริงของสไตล์ที่สอดคล้องกันแผงด้านล่างจะเปลี่ยนสไตล์ปัจจุบันแบบเรียลไทม์ มีความจำเป็นที่จะต้องใช้การตัดสินเชิงตรรกะของช่วงเวลาเพื่อทำการตัดสินเชิงตรรกะเกี่ยวกับช่วงเวลาเคอร์เซอร์และสไตล์และมีข้อผิดพลาดมากขึ้นเรื่อย ๆ - -
นอกจากนี้ยังมีการประมวลผลแบบโต้ตอบที่ซับซ้อนจำนวนมากซึ่งไม่ได้แสดงที่นี่ คุณสามารถตรวจสอบรายละเอียดซอร์สโค้ด
คนร่ำรวย
โครงการไม่ได้เผยแพร่ไปยัง Jitpack ที่นี่เพราะในฐานะบรรณาธิการข้อความที่หลากหลายทุกคนมีความต้องการและวิธีการโต้ตอบที่ไม่ซ้ำกันของตนเองและไม่มีวิธีที่จะบรรลุข้อความที่หลากหลายที่สามารถตอบสนองความต้องการทั้งหมด และเนื่องจากตรรกะการโต้ตอบของโปรแกรมแก้ไขข้อความที่หลากหลายนั้นมีความซับซ้อนแน่นอนจึงเป็นไปไม่ได้ที่จะทำให้มั่นใจได้ว่าเข้ากันได้กับการโต้ตอบและสถานการณ์ทั้งหมดดังนั้นที่นี่เราจึงพยายามอย่างเต็มที่ที่จะใช้สถานการณ์การโต้ตอบ
1. แนะนำ lib ของบรรณาธิการสู่โครงการ 2.xml เพื่อเพิ่มตัวแก้ไข
<com.study.xuan.editor.widget.Editor
android:id="@+id/editor"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
มันจะถูกใช้ตามปกติ
มันง่ายมากที่มันถูกห่อหุ้มและใช้ในการใช้ Richhelper
//绑定xml中的Editor
public void attach(Editor editor);
//new 一个Editor
public Editor buildEditor(Context context)
//部分事件回调
public void setCallBack(onEditorEventListener callBack)
//操作面板右侧空白增加自定义布局
public void setMoreOperateLayout(View view)
//异步转义MarkDown
public void toMarkDown()
public interface onEditorCallback {
//行数量变化时
void onLineNumChange(List<RichModel> data);
//点击操作面板的图片添加图片,可以使用自己项目中的图片框架,选中后对应调用editor.addPhoto(List<String> data);方法即可
void onPhotoEvent();
//转义MarkDown的进度回调
void onMarkDownTaskDoing(int progress, int max);
//转义MarkDown成功
void onMarkDownTaskFinished(String markdown);
}
Global Singleton ซึ่งเป็นสถาปัตยกรรมพื้นฐานช่วยในการใช้ฟังก์ชั่นโดยรวมของ RichEditor
PanelBuilder คลาสการใช้งานมีสองคลาสการใช้งาน FontParambuilder แสดงถึงรูปแบบของประเภทตัวละครและวรรค builder แสดงถึงรูปแบบของประเภทวรรค วิธีการสื่อสารระหว่าง Panle และ Editor คือผ่าน ipanel ใน Richbuilder Singleton
คลาสวิศวกรรมนามธรรมที่ใช้ในการสร้างประเภท Span ในชั้นนอก ในหมู่พวกเขาโรงงานนามธรรมถูกแบ่งออกเป็นสามโรงงาน: icharactertylefactory, iParagraphfactory และ iUpdateAppearanceFactory ซึ่งสอดคล้องกับตัวละคร (โรงงานสไตล์ Spany Span), วรรค (โรงงานสไตล์วรรค) และ (โรงงานที่กำหนดเอง
กลยุทธ์การค้นหาใช้ในการสำรวจรูปแบบการขยายและกระบวนการในย่อหน้าที่แน่นอน NormalSearch ใช้ isearchstrategy และใช้การประมวลผลแบบ traversal ปกติ (สามารถปรับแต่งการเรียงลำดับที่รวดเร็วหรือวิธีการเรียงลำดับที่มีประสิทธิภาพอื่น ๆ สำหรับการประมวลผล)
อินเทอร์เฟซการจัดการพารามิเตอร์ใช้ paramManager ที่สอดคล้องกับคลาสซึ่งใช้เพื่อเปรียบเทียบและประมวลผลสไตล์ปัจจุบันและสไตล์การอินพุตก่อน
คลาสการใช้งาน Editor ที่สืบทอดมาจาก Recyclerview, Adapter สอดคล้องกับ Richadapter และโมเดลสอดคล้องกับ RichModel
ตัวกรองอินพุตสำหรับการประมวลผลสไตล์เมื่ออินพุตและการลบ
Spanstep1filter
ตัวกรองระดับแรกใช้ในการจัดการการประมวลผลของ SPAN_EXCLUSIVE_INCLUSIVE และ SPAN_EXCLUSIVE_EXCLUSIVE เมื่อการจัดการสไตล์ต่อท้ายและความสับสน
spanstep2filter
ตัวกรองระดับที่สองใช้เพื่อจัดการกับการสร้างและบำรุงรักษาสไตล์เพื่อให้ได้ชุดรูปแบบทั้งหมดของข้อความปัจจุบันและเพื่อบันทึกดัชนีที่สอดคล้องกันของสไตล์และเพื่อรักษาไว้ใน RichModel ที่สอดคล้องกัน
การประมวลผลแบบอะซิงโครนัสใช้ในการประมวลผลการแปลงข้อมูลเป็นประเภทการแปลงที่สอดคล้องกัน
แยกวิเคราะห์
การแปลงอินเทอร์เฟซ
Markdownparse
การประมวลผลแบบลอจิคัลถูกแปลงเป็นไวยากรณ์ Markdown โดยใช้นิพจน์ทั่วไป
คลาสการประมวลผลข้อมูลโดยใช้การประมวลผลข้อมูลที่เกี่ยวข้องกับรูปแบบการผสานสไตล์การประมวลผล ฯลฯ
พาเนลแสดงถึงแผงการทำงานและพาเนลใช้ EditorPanelalpha โดยค่าเริ่มต้น พาเนลถูกนำไปใช้ผ่าน iPanel ใน Richbuilder เพื่อเชื่อมโยงตัวแก้ไข
[2018.3.17]: การแก้ไขข้อความที่หลากหลายภายในบรรทัดของข้อความ
[2018.3.19]: การลบข้อความหลายบรรทัดให้เสร็จสมบูรณ์เพิ่มหนึ่งบรรทัดและลบบรรทัดถัดไปไปยังบรรทัดก่อนหน้า และรักษาสไตล์
[2018.3.20]: กรอกการลบและการเพิ่มข้อความหลายบรรทัดรวมถึงบรรทัดแรกของการลบและอินพุตในบรรทัดทำให้สไตล์ข้อความที่หลากหลายเคลื่อนที่ตามวรรค
[2018.3.24]: การซิงโครไนซ์ของแถบการดำเนินการอย่างสมบูรณ์หลังจากคลิกทำให้รูปแบบข้อความปัจจุบันและการดำเนินการแบบรวมเป็น Unified
[2018.3.29]: ทำหน้าที่ของการแทรกสไตล์ใหม่และเริ่มต้นฟังก์ชั่นพื้นฐานของการแก้ไข
[2018.4.09]: ฟังก์ชั่นสไตล์ย่อหน้าที่สมบูรณ์
[2018.4.11]: ความสำเร็จเบื้องต้นของ Markdown Syntax Escape
Copyright 2017 [DrownCoder]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.