精华内容
下载资源
问答
  • 需求如下:支持单选、多选、填空题支持图片文字混排输入框有交互,排版精致美观为了体验优化,不能使用网页实现效果思路分析我们的图文混排控件继承自TextView,重写了关键的测量onMeasure和绘制onDraw步骤测量决定...

    背景

    最近我们的产品来了个新的模块,给学生做题提高成绩的。需求如下:

    支持单选、多选、填空题

    支持图片文字混排

    输入框有交互,排版精致美观

    为了体验优化,不能使用网页实现效果

    思路分析

    我们的图文混排控件继承自TextView,重写了关键的测量onMeasure和绘制onDraw步骤

    测量决定了混排里的元素的位置、尺寸;

    绘制决定了如何去渲染这些元素(以及通知输入框位置)

    1:图片文字混排

    系统的TextView通过ImageGetter就可以原生实现对文本img标签的支持,从而达到图文混排的效果。

    具体实现步骤请参考Github上的一个库https://github.com/zzhoujay/RichText

    2:输入框混排

    下面是我具体的实现步骤,请在步骤1图文混排源码基础上进行阅读。

    最后的UI结构应该是这样子的,用输入框盖在透明的占位图上,达到了输入框混排的效果。

    7c688b8040fa?utm_campaign=hugo&utm_content=note&utm_medium=reader_share&utm_source=qq

    做题控件树

    如果是列表里展示结果,不涉及输入框的。那就只有一个图文混排控件,把输入框转换成下划线____即可

    2.0:根据题目答案数量,生成对应数量的输入框,添加到容器中,设置为不可见

    2.1:题目中的输入框标记,通过正则表达式使用图片Img标签代替,src设置为:Input标签+输入框对应答案ID+该输入框对应答案文字长度

    2.2:在ImageGetter中,发现当前图片包含Input标签,则使用一个透明的占位图代替,宽度为画笔的文本尺寸*答案长度

    2.3:参考本步骤开始给出的代码地址,稍微加工下就可以拿来实现自己的TextView,在onDraw事件里,就能获取当前的x、y值。

    2.4:在onDraw事件里,遇到当前绘制的Span是图片类型,且src包含Input标签的,获取当前的高度和左边距,通过下面代码获取图片的宽度。imgSpan.getDrawable().getBounds().width()

    2.5:用步骤4取到的数据,设置MarginLeft和MarginTop,还有宽度,通过输入框对应答案ID来找到2.0对应的输入框,刷新其位置和宽度

    7c688b8040fa?utm_campaign=hugo&utm_content=note&utm_medium=reader_share&utm_source=qq

    输入框排版大体流程

    最终实现的效果如如下,满足产品需求

    7c688b8040fa?utm_campaign=hugo&utm_content=note&utm_medium=reader_share&utm_source=qq

    效果图1

    7c688b8040fa?utm_campaign=hugo&utm_content=note&utm_medium=reader_share&utm_source=qq

    效果图2

    FAQ

    下面是一些网友的提问

    1 问题:效果图里,文字垂直居中对齐,怎么做到的

    回答:

    原生TextView是底部对齐的,我们自己实现的图文混排是可以自由定制垂直对齐方式的,参考我给出的第二个博客地址,他里面会记录每一行的行高,然后在绘制的时候,判断当前行高是否大于标准行高(我们填空题或者选择题都会有一个初始行高。)

    如果当前行高>默认行高,则说明此行有大图,文本垂直居中=当前高度+(行高-文本高度)/2;

    如果当前行高==默认行高,判断图片的高度如果小于默认行高,则图片垂直居中=当前高度+(行高-图片高度)/2;

    2 请问返回的数据有处理不了的标签怎么处理,还有怎么实现如果返回的图片宽度大于一屏不被截图的问题呢?

    回答:

    1:标签和服务端沟通好,只返回有用的标签。一些数学符号用png图片代替。

    2:Html.ImageGetter,在请求返回Bitmap的时,对Bitmap的宽度进行判断(bitmap.getWidth()),如果超过最大宽度,则使用最大宽度,同时拿到缩放比率,对高度进行等比处理。

    3 填空输入功能看了您的文章还是不太明白,请问您三个关于输入框排版的问题。

    1、输入框怎么拿到input位置。

    2、输入框怎么刷新位置。

    3、输入框怎么与文字对齐居中。

    回答:

    第一个问题输入框怎么拿到input位置。

    1:input我们实际上也是转换成一个图片标签input_A

    2:参考http://blog.csdn.net/yellowcath/article/details/27527275如何实现自定义TextView;里面ondraw的时候,判断当前是个imageSpan,并且src是input_A

    3:满足2,则判定,该image标签是个输入框标签。如果你仔细看过2步骤的博客;则知道自定义TextView是逐行绘制标签的,我们在绘制的时候,是可以拿到当前的x和y的。

    第二个问题输入框怎么刷新位置。

    还记得一步骤的src里面的input_A吗?这是我们自定义的标签,第二个标签则是input_B。以此类推

    input_A 我们对应创建一个输入框A,放进一个hashMap。

    逐行绘制的时候,我们拿到x、y,则更新该输入框的x、y就好了。

    第三个问题输入框怎么与文字对齐居中。

    参考问题2给出的答案

    补充

    这个图文混排模块,我在17年的时候就已经完成上线了,最早发布在博客园https://www.cnblogs.com/kimmy/p/5027299.html

    到今天3年过去,期间的迭代主要围绕着渲染性能、各种格式文本支持,标签()嵌套扩展性等迭代,主体测量、绘制流程大体上就是文中所述。

    安卓原生的Html.fromHtml在处理一些标签的时候,需要额外预处理下比如

    *

    *

    * 将不是html标签的< 替换成< 不然{@link android.text.Html#fromHtml(String)}会丢失,比如下面数据只有a, "a

    * 把不是引号里的空格 替换成 不然{@link android.text.Html#fromHtml(String)}会将多个空格合并成一个

    * 把不是引号里的\n 替换成
    ;不然{@link android.text.Html#fromHtml(String)}处理后,课后堂堂清渲染引擎识别不了换行符号

    *

    * 输入:c( ) \n

    * 输出:<b>c<d (   )

    展开全文
  • 第3章制作图文混排网页图像也是网页中的主要元素之一,图像不但能美化网页, 而且能够更直观地表达信息。在页面中恰到好处地使用图像,能使网页更加生动、形象和美观。【教学导航】教学目标(1)学会通过“管理站点”...

    第3章制作图文混排网页

    图像也是网页中的主要元素之一,图像不但能美化网页, 而且能够更直观地表达信息。

    在页面中恰到好处地使用图像,能使网页更加生动、形象和美观。

    【教学导航】

    教学目标

    (1)学会通过“管理站点”对话框创建站点

    (2)学会应用“高级”方式创建站点

    (3)学会通过“文件”面板创建网页

    (4)掌握设置页面背景图像的方法

    (5)掌握在网页中插入图像的方法

    (6)掌握在网页中插入鼠标经过图像的方法

    (7)掌握设置图像属性的方法

    (8)掌握制作图文混排网页的技巧

    本章重点

    (1)设置页面背景图像

    (2)在网页中插入图像

    (3)设置图像属性

    本章难点

    (1)应用“高级”方式创建站点

    (2)插入鼠标经过图像

    教学方法

    任务驱动法、分组讨论法、三步训练法

    课时建议

    6课时(含课堂同步训练)

    3.1课前准备

    (1 )在本地硬盘创建文件夹

    (2)启动 Dreamweaver CS3

    通过 Windows的【开始】菜单启动 Dreamweaver CS3。

    3.2课堂引导训练及评价

    【课堂引导训练任务描述】

    1、网页制作任务卡

    网页制作任务卡如表3-1所示。

    表3-1网页制作任务卡

    第3

    第3章制作图文混排网页

    PAGE

    PAGE #

    Dreamweaver CS3网页制作案例教程

    Dreamweaver CS3网页制作案例教程

    PAGE

    PAGE #

    任务编号

    03-1任务名称

    制作图文混排网页

    网页主题

    瀑布游

    计划工时min

    网页制作任务描述

    (1)应用【站点定义】对话框的“高级”方式创建站点“瀑泉游”

    (2) 应用“文件”面板新建网页“index0301.html”

    (3)设置网页的背景图像

    (4)将 Word文档“瀑布之美.doc”导入到网页“ index0301.html ”中

    (5)设置网页中文本的格式

    (6)在网页中插入多幅图像

    (7)在网页中插入鼠标经过图像

    (8)设置图像属性

    网页布局结构分析

    页面自然布局、无导航栏

    网页色彩搭配分析

    文本主体颜色:#000000,其他文本颜色: #0000FF、#00FFFF、#FF0000

    网页组成元素分析

    主要包括图像、鼠标经过图像、标题文本、正文文本等网页元素

    任务实现流程分析

    创建站点T新建网页T设置页面背景图像T导入Word文档T插入图像、

    设置图像属性T插入鼠标经过图像且设置其属性T预览网页效果

    配盘素材导引

    原始文件位置:start\03第3章制作图文混排网页\task03-1 最终文件位置:result\03第3章制作图文混排网页\task03-1

    2、网页制作任务跟踪卡 网页制作任务跟踪卡如表

    2、网页制作任务跟踪卡 网页制作任务跟踪卡如表

    3-2所示。

    表3-2网页制作任务跟踪卡

    任务编号

    开始时间

    完成时间

    计划工时

    实际工时

    当前状态

    【网页效果展示】

    网页index0301.html的浏览效果如图 3-1所示。

    【任务完成过程】

    3.2.1应用“高级”方式创建站点“瀑泉游”

    【操作要求】

    应用【站点定义】对话框的“高级”方式创建站点“瀑泉游”

    谒布之糞握荐廈=****

    山之畑奘在群垮竟秀,纯抹直-矣在云卿I跆 ?SW.炖% 慧在变吃万千-重耐眉贻輙冏型涵昵6瞬》?,ifUrMSffi

    氏之至融春smtflE撫市.

    淖布定奏在于《雾按玮-sit万千.聞如同玉辆^再,近现刼世万马西1S.璃1站弄欣呑°a3t三百丈?听殴^+里”,滋SH?靳"飞殊匱轻K, 险.直;*飞述而下,歧;tit删剧 暑;1疣特&(:机.um飞輝凰雨来3E妊黏編盜或??嶽盘沖之E逼如窓耳箫臥连J鼻不魯

    ?空轻■±0ps,*如五《七律,a岡Si呜.正星飞*境岳踰iHffl,至嵐S至tflrt言+ ftH妲域辻fa.地畑曲变,河舷孚育了丈■的 肺“它ff]务惮WR覇让人心迪神徨.

    斎呆ww布舞

    賁W呵ilW醉他干贵州省齡中丘J?S的置宁,臣ft阳市的13余公里,诳由也环风前昏异&]大■I'iftitJ 组弧耳中以请砌大镶117農硕财:郭曲瞬対果捌禅甫棵.

    -DcesMisfiSj, ft为牡頌”[如骷为百丈曳.醍上为議右水下为百丈黄山的百丈准呆蜩S桥曲5*布不仮冈照各SWft,飙十强就% 塔称世畀上Sffl型、量社真曲瞩冊誡芾轟,而且在茸fS廖SW書讦給*^ JIS特泊咼润内龙育寻抽《8斷恃扫応:帧.成菩吿的咅刖地下世鼎,具有範丈的战飙光於值,遁询已ttt進碍《果豹議齐S列迪全

    -DcesMisfiSj, ft为牡頌”

    [如骷为百丈曳.醍上为議右水下为百丈

    黄山的百丈准

    百丈慮范于?山的*菱峰利幣云峰之间,佶科只11理爭商fiT弗若 百丈1*在尢水!SH'm叭 最性各杲 枯水苹节,百丈81妞流祢*. ilJ艳

    展开全文
  • 制作图文混排网页学习笔记

    千次阅读 2020-04-11 20:09:33
    图像是网页中的主要元素之一,图像...*这是一个图文混排的效果图: 1.打开管理站点对话框,单击“创建”按钮,创建一个HTML5文档。 2.单击【属性】面板【页面属性】按钮,在外观(css)设置界面单击背景图像文本框右...

    图像是网页中的主要元素之一,图像不但可以美化网页,而且能更直观的表达信息。浏览网页时,通过观察图片,就可以理解网页主题,使阅读者在阅读标题和正文之前对网页有个大致了解,所以网页中插入图片在制作网页中起着至关重要的作用。
    这是一个图文混排效果图:
    在这里插入图片描述
    1.打开管理站点对话框,单击“创建”按钮,创建一个HTML5文档。
    2.单击【属性】面板【页面属性】按钮,在外观(css)设置界面单击背景图像文本框右侧的浏览按钮,选择图片,单击确定。
    在这里插入图片描述
    3.双击【文件】面板上的test文件夹,选择需要导入的文档,拖到【文档】窗口,弹出插入文档,选择“插入内容”,选择插入方式为“带结构(段落、列表、表格等)的文本”,单击确定,然后用Enter键对段落进行编辑,(或者直接选择复制粘贴的方法将文本复制导入)。
    4.在【属性】面板单击css按钮,对文本的标题、段落进行文字大小、颜色、格式的调整。注意:如果在同一行设置了两种文本格式,使用行内元素签…,将格式分开。
    在这里插入图片描述
    5.切换视图,将光标置于你想要插入图片位置的代码视图旁,选择插入图像,弹出【选择图像源文件】对话框,在对话框中选择图片插入,然后在【属性】设置图片属性。在这里插入图片描述
    6.将光标置于代码视图网页正文第一小段之后,选择【插入】面板中【图像对象】中的【光标经过图像】按钮,然后打开原始图像按钮右面的浏览插入图片,再选择鼠标经过图像后面的浏览,插入图片,再输入需替换的文本,点击确定。在这里插入图片描述
    再对图像进行属性设计。注意:可用快速编辑器直接对HTML标签进行编写。
    在这里插入图片描述
    7.按快捷键F12,浏览图文混排网页效果。最后悄悄的把代码放下,希望各位大佬指正。在这里插入图片描述

    展开全文
  • 页面包含元素:图片,标题,时间,段落文本,水平线分割区域(网页title内容
  • iOS图文混排

    2015-11-16 20:52:56
    在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式 iOS sdk中为我们提供了...

    在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式



    iOS sdk中为我们提供了一套完善的文字排版开发组件:CoreText。CoreText库中提供了很多的工具来对文本进行操作,例如CTFont、CTLine、CTFrame等。利用这些工具可以对文字字体每一行每一段落进行操作。

    此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同。

     

    1.         首先,需要引入CoreText库

     

    在需要使用的类文件中添加#import <CoreText/CoreText.h>头文件。

    2.         设置文本的参数

    创建一个NSMutableAttributedString对象,包含所需展示的文本字符串。这样就可以对其进行设置了。通过CTFontCreateWithName函数创建一个CTFont对象,利用NSMutableAttributedString对象的addAttribute方法进行设置。类似的方法可以设置字间距。

    对其方式与行间距的设置方式:

    1. // 文本对齐方式   
    2.     CTTextAlignment alignment = kCTLeftTextAlignment;   
    3.     CTParagraphStyleSetting alignmentStyle;   
    4.     alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;   
    5.     alignmentStyle.valueSize = sizeof(alignment);   
    6.     alignmentStyle.value = &alignment;   
    7.  // 创建设置数组   
    8.             CTParagraphStyleSetting settings[] ={alignmentStyle};   
    9. CTParagraphStyleRef style = CTParagraphStyleCreate(settings, 1);   

    同样使用addAttribute设置字符串对象。这样的方法还可以设置行间距,段间距等参数。

    3.         计算图片所占高度。图片可以使用UIImageView 来进行显示。很容易便可获取每张图片所占总高度。

    4.         由于图片宽度是固定的这样就可以计算每行文字缩短的字数。只要文本的总体高度低于图像总高度则文字长度都是缩短的。用CTTypesetterSuggestLineBreak函数动态的计算每一行里的字数,因为每一行里面的中文字、标点符号、数字、字母都不一样所以可以显示的字数肯定也是不同的,所以需要作这样的计算。这样循环直至文本结束,就可以知道有多少行字了。再根据字体高度和行间距得出总的文本高度,如果文本高度大于图片总高度那么显示区域的Frame高度就是文本的高度,反之亦然。

    5.         绘制文本:

    设置每一行绘制文本的区间:

    1. CFRange lineRange = CFRangeMake(currentIndex, lineLength);   
    2. 建立文本行对象   
    3. CTLineRef line = CTTypesetterCreateLine(typeSetter, lineRange);   
    4. CGFloat x = [self textOffsetForLine:line inRect:self.bounds];   
    5. // 设置一行的位置   
    6. CGContextSetTextPosition(context, x, y);   
    7. // 绘制一行文字   
    8.     CTLineDraw(line, context);   

    6.         其他功能:

    在完成文本绘制功能后可以加入调整文字大小的功能,和图片的放大的功能。

    文字大小可以通过直接设置字体大小后重新绘制文本来实现。

    图片放大可以在视图上添加一个新的UIImageView 来展示放大后的图片,并且加入动画效



    实现代码:

    [cpp]  view plain copy
    1. void RunDelegateDeallocCallback( void* refCon ){  
    2.       
    3. }  
    4.   
    5. CGFloat RunDelegateGetAscentCallback( void *refCon ){  
    6.     NSString *imageName = (NSString *)refCon;  
    7.     return 80;//[UIImage imageNamed:imageName].size.height;  
    8. }  
    9.   
    10. CGFloat RunDelegateGetDescentCallback(void *refCon){  
    11.     return 0;  
    12. }  
    13.   
    14. CGFloat RunDelegateGetWidthCallback(void *refCon){  
    15.     NSString *imageName = (NSString *)refCon;  
    16.     return 100;//[UIImage imageNamed:imageName].size.width;  
    17. }  

    先设置一个CTRun的委托,主要是用于指定对象的上行高,宽,或上下文释放时使用。

    [cpp]  view plain copy
    1. -(void)drawCharAndPicture  
    2. {  
    3.     CGContextRef context = UIGraphicsGetCurrentContext();  
    4.       
    5.     CGContextSetTextMatrix(context, CGAffineTransformIdentity);//设置字形变换矩阵为CGAffineTransformIdentity,也就是说每一个字形都不做图形变换  
    6.       
    7.     CGAffineTransform flipVertical = CGAffineTransformMake(1,0,0,-1,0,self.bounds.size.height);  
    8.     CGContextConcatCTM(context, flipVertical);//将当前context的坐标系进行flip  
    9.     NSLog(@"bh=%f",self.bounds.size.height);  
    10.       
    11.     NSMutableAttributedString *attributedString = [[[NSMutableAttributedString alloc] initWithString:@"请在这里插入一张图片位置"] autorelease];  
    12.       
    13.       
    14.     //为图片设置CTRunDelegate,delegate决定留给图片的空间大小  
    15.     NSString *imgName = @"img.png";  
    16.     CTRunDelegateCallbacks imageCallbacks;  
    17.     imageCallbacks.version = kCTRunDelegateVersion1;  
    18.     imageCallbacks.dealloc = RunDelegateDeallocCallback;  
    19.     imageCallbacks.getAscent = RunDelegateGetAscentCallback;  
    20.     imageCallbacks.getDescent = RunDelegateGetDescentCallback;  
    21.     imageCallbacks.getWidth = RunDelegateGetWidthCallback;  
    22.     CTRunDelegateRef runDelegate = CTRunDelegateCreate(&imageCallbacks, imgName);  
    23.     NSMutableAttributedString *imageAttributedString = [[NSMutableAttributedString alloc] initWithString:@" "];//空格用于给图片留位置  
    24.     [imageAttributedString addAttribute:(NSString *)kCTRunDelegateAttributeName value:(id)runDelegate range:NSMakeRange(0, 1)];  
    25.     CFRelease(runDelegate);  
    26.       
    27.     [imageAttributedString addAttribute:@"imageName" value:imgName range:NSMakeRange(0, 1)];  
    28.       
    29.     [attributedString insertAttributedString:imageAttributedString atIndex:4];  
    30.       
    [cpp]  view plain copy
    1.     //换行模式  
    2.     CTParagraphStyleSetting lineBreakMode;  
    3.     CTLineBreakMode lineBreak = kCTLineBreakByCharWrapping;  
    4.     lineBreakMode.spec = kCTParagraphStyleSpecifierLineBreakMode;  
    5.     lineBreakMode.value = &lineBreak;  
    6.     lineBreakMode.valueSize = sizeof(CTLineBreakMode);  
    7.       
    8.     CTParagraphStyleSetting settings[] = {  
    9.         lineBreakMode  
    10.     };  
    11.       
    12.     CTParagraphStyleRef style = CTParagraphStyleCreate(settings, 1);  
    13.       
    14.           
    15.     // build attributes  
    16.     NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithObject:(id)style forKey:(id)kCTParagraphStyleAttributeName ];  
    17.       
    18.     // set attributes to attributed string  
    19.     [attributedString addAttributes:attributes range:NSMakeRange(0, [attributedString length])];  
    20.       
    21.   
    22.       
    23.     CTFramesetterRef ctFramesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)attributedString);  
    24.       
    25.     CGMutablePathRef path = CGPathCreateMutable();  
    26.     CGRect bounds = CGRectMake(0.0, 0.0, self.bounds.size.width, self.bounds.size.height);  
    27.     CGPathAddRect(path, NULL, bounds);  
    28.       
    29.     CTFrameRef ctFrame = CTFramesetterCreateFrame(ctFramesetter,CFRangeMake(0, 0), path, NULL);  
    30.     CTFrameDraw(ctFrame, context);  
    31.       
    32.     CFArrayRef lines = CTFrameGetLines(ctFrame);  
    33.     CGPoint lineOrigins[CFArrayGetCount(lines)];  
    34.     CTFrameGetLineOrigins(ctFrame, CFRangeMake(0, 0), lineOrigins);  
    35.     NSLog(@"line count = %ld",CFArrayGetCount(lines));  
    36.     for (int i = 0; i < CFArrayGetCount(lines); i++) {  
    37.         CTLineRef line = CFArrayGetValueAtIndex(lines, i);  
    38.         CGFloat lineAscent;  
    39.         CGFloat lineDescent;  
    40.         CGFloat lineLeading;  
    41.         CTLineGetTypographicBounds(line, &lineAscent, &lineDescent, &lineLeading);  
    42.         NSLog(@"ascent = %f,descent = %f,leading = %f",lineAscent,lineDescent,lineLeading);  
    43.           
    44.         CFArrayRef runs = CTLineGetGlyphRuns(line);  
    45.         NSLog(@"run count = %ld",CFArrayGetCount(runs));  
    46.         for (int j = 0; j < CFArrayGetCount(runs); j++) {  
    47.             CGFloat runAscent;  
    48.             CGFloat runDescent;  
    49.             CGPoint lineOrigin = lineOrigins[i];  
    50.             CTRunRef run = CFArrayGetValueAtIndex(runs, j);  
    51.             NSDictionary* attributes = (NSDictionary*)CTRunGetAttributes(run);  
    52.             CGRect runRect;  
    53.             runRect.size.width = CTRunGetTypographicBounds(run, CFRangeMake(0,0), &runAscent, &runDescent, NULL);  
    54.             NSLog(@"width = %f",runRect.size.width);  
    55.               
    56.             runRect=CGRectMake(lineOrigin.x + CTLineGetOffsetForStringIndex(line, CTRunGetStringRange(run).location, NULL), lineOrigin.y - runDescent, runRect.size.width, runAscent + runDescent);  
    57.               
    58.             NSString *imageName = [attributes objectForKey:@"imageName"];  
    59.             //图片渲染逻辑  
    60.             if (imageName) {  
    61.                 UIImage *image = [UIImage imageNamed:imageName];  
    62.                 if (image) {  
    63.                     CGRect imageDrawRect;  
    64.                     imageDrawRect.size = image.size;  
    65.                     imageDrawRect.origin.x = runRect.origin.x + lineOrigin.x;  
    66.                     imageDrawRect.origin.y = lineOrigin.y;  
    67.                     CGContextDrawImage(context, imageDrawRect, image.CGImage);  
    68.                 }  
    69.             }  
    70.         }  
    71.     }  
    72.       
    73.     CFRelease(ctFrame);  
    74.     CFRelease(path);  
    75.     CFRelease(ctFramesetter);  
    76. }  

    效果:



    从上面看大家可能没有发现什么问题,当把图片放在字的最左边会是什么样子的?


    因此为了避免这种情况发生,我在代码中添加了换行模式。添加换行后的效果:



    展开全文
  • 图文混排

    千次阅读 2013-10-11 14:08:43
    在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式 iOS sdk中为我们提供了一套...
  •  今天我们共同学习一款“图文混排CSS列表”的制作。首先从分析一下此列表的特点,然后编写HTML代码,最终应用CSS样式实现最终的效果。列表的效果如图所示: 最顶部是栏目名称“模板无忧 MB5U.com ”与栏目导航...
  • 图文混排的注意点

    2019-08-28 23:53:08
    最近写网页,写到了图文混排的部分,想了想自己也不是很熟悉,快遗忘的差不多了,就想写篇博客,写代码的同时,敲下注意点,供自己日后,也让大家参考。 图文混排准备工作 1.首先你脑子里得知道自己要写出一个什么...
  • 班 级 实训日期 姓 名 学 号 指导教师 李颖云 实训名称 图文混排网页 实训学时 2 实训成绩 一实训目的(本次上机实践所涉及并要求掌握的知识点) 让学生能熟练掌握Html的文本图像属性掌握图文混排实现以下网页 ...
  • 网页中“一切皆是盒子”同样长了脑袋,凭什么我就不会盒子CSS处理网页时,它认为每个元素都包含在一 个不可见的盒子里。为什么要想象成盒子呢?因为如果把所有的元 素都想象成盒子,那么我们对网页的布局就相 当...
  • 安卓如何实现图文混排一、安卓实现图文混排的几种方式1. EditText with Spannable2. RecyclerView3. WebViewF. 最终方案二、图片保存的几种方案1. 保留在原来位置2. 复制到应用的文件夹3. 复制到笔记的文件夹F. 最终...
  • FTCoreText图文混排框架

    2014-11-10 17:30:11
    FTCoreText图文混排框架的使用 一 FTCoreText介绍  FTCoreText是采用类HTML的方式在Text view上实现丰富的文字效果,包括文字大小、颜色、字体、下划线,链接以及图文混排等等,以及对文字进行排版。实现类似于...
  • 页面内容样式设计——图文混排

    千次阅读 2020-05-19 12:33:54
    图文混排的结构没有统一标准,一般做法是把图像和文本信息同时封装在一个包含元素内,再嵌入其他布局元素或修饰元素。 实现一个图文混合单元模块 1. HTML代码 <!DOCTYPE html> <html lang="zh-CN"> <...
  • 文字环绕 图文混排 支持Span折叠" title="[转载]Android 文字环绕 图文混排 支持Span折叠" height="480" width="320">  文字环绕 图文混排 支持Span折叠" title="[转载]Android 文字环绕 图文混排 ...
  • 在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式   iOS sdk中为我们提供了...
  • 在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式   iOS sdk中为我们提供了一套...
  • 4 /* */是CSS中的注释文本,此文本不会显示再浏览器窗口中。 二 引入CSS样式表 1 行内式 行内式也称为内联样式,是通过标记的style属性来设置元素的样式,其基本语法格式如下: <标记名 style=“属性1;属性2...
  • 现在遇到比较多的图文混排的基本有三种:一种是在标签中显示 价格符号+价格+某种内部项目单位(如粮票符号)+数量,这种在项目中用的比较多些;第二种是商品详情中展示一段文字+一组图片或者是,一段文字+一张图片的...
  • css实现图文混排

    2021-02-27 23:42:42
    创建盒子结构: <div class="box1"> ... } 最后覆盖上效果图: 拓展思路: 利用这种思路只要计算好盒子的大小的高宽度盒子将多种复杂的图文混排方式表现出来,如果要加一个链接,只需要在大盒子外层套一个标签
  • 上下结构的图文混排CSS列表天我们共同学习一款经常能用到的 图文混排CSS 列表”的制作。首先从分析一下此列表的特点,然后编写HTML 代码,最终应用CSS 样式实现最终的效果。在52CSS.com 以前的文章中,有着许多相似...
  • 在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式   iOS sdk中为我们提供了...
  • 在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式 iOS sdk中为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,989
精华内容 795
关键字:

网页图文混排文本