当前位置:首页 » 安卓系统 » android图文混排

android图文混排

发布时间: 2023-11-08 16:30:58

Ⅰ Android TextView使用及性能优化

TextView 是Android中最常用的控件,在这里记录下TextView 的用法;

在Android中可以使用系统自带的4种字体:

在XML中使用 android:typeface="normal" 进行设置

将字体文件放到main/assets/fonts目录下,使用Asset读取字体后进行设置

使用 android:drawableLeft="@mipmap/ic_launcher" 可以设置一张图片显示在文字的上下左右,减少布局层级

使用Span能够在一段TextView中设置不同颜色的字体,链接,图片等内容

使用ClickableSpan 能够设置一段文字的点击事件

创建自己的MyClickableSpan:

之后使用SpannableStringBuilder来创建字符串,并使用setSpan来为字符串的一部分设置Span对象

其中setSpan()方法的最后一个参数标识有以下常量,这些常量标识着在 对SpannableStringBuilder进行insert时 添加的字符适用的规则:

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE

Spanned.SPAN_EXCLUSIVE_INCLUSIVE

Spanned.SPAN_INCLUSIVE_EXCLUSIVE

Spanned.SPAN_INCLUSIVE_INCLUSIVE

前一个 EXCLUSIVE / INCLUSIVE 标识着在设置了Span的一段字符之前(紧挨着)插入字符时,被不被包含到Span范围中, EXCLUSIVE 表示包含, INCLUSIVE 表示不包含;

第二个 EXCLUSIVE / INCLUSIVE 同理表示插入这段字符之后的效果;

ImageSpan用于在TextView中插入图片,可以用来实现图文混排

使用方法:

这样实现的效果是文字与图片底部进行对齐,如果需要图片中线与文字中线对其,需要自己重写ImageSpan

​ Android 中的TextView中存在着很多EditText中的特性,在setText()方法中会涉及到很多Span相关的操作,比如设置TextWatcher,重新构造Spannable等操作,在我们仅仅显示静态文本的时候这些操作都是没有必要的(通过使用普通的TextView进行Debug来验证普通的TextView的确是Span的);

​ 在大量显示静态文本的时候就可以通过StaticLayout来计算出TextView的布局信息,这项工作可以放到非UI线程来进行,能够减少在setText()的时候UI线程的耗时,达到优化TextView性能的目的;

​ StaticLayout是TextView中用于显示多行静态文本的Layout,也是能够支持SpannableString的,只是不能在Span变化之后重新Layout,所以在大部分场景下已经适用;

通过这个自定义的View来显示Text,在onDraw()的时候直接使用layout来进行绘制,而设置需要显示的文本则直接使用setLayout()来实现

使用下面给出的参考链接中的测试Demo在 ZTE A2017 Android7.1.1 高通820设备上,普通TextView在ListView中连续滚动的帧数是55帧,使用StaticLayout的结果为60帧

可以作为在APP使用CPU资源较多的情况下的优化手段

参考链接: TextView预渲染研究

在Android中,TextView的测量消耗了大量的时间,Android P中提供了PrecomputedText能够将测量这个过程放到后台来执行,减轻对于UI线程的卡顿;

非Android P时,使用AppCompatTextView控件,使用setTextFeature()方法来将文本的measure过程放到其他线程来执行,而不是直接将text应用于TextView;

在调用了这个方法之后如果对TextView进行边距,文字大小等的设置都将会报错;

Prefetch Text Layout in RecyclerView

PrecomputedTextCompat

在ListView中仅替换设置Text的方法时未测试出性能与普通方法有什么优势,猜测是ListView没有在getView和显示之间预留时间,

测试项目地址:

https://github.com/GavynZhang/PrecomuptedTextViewTest

Ⅱ Android listview图文混排,有文字,图片,音频,视频 如何判断数据类别

你上面的那么些就行,你的listview 是图文混排,但是你的listview的填充数据肯定是存在一个list中的吧?
首先就是在你的这个函数里,根据参数position,找到list中这个位置是哪种类型,根据他的类型返回不同的布局,然后再getView函数里调用getItemViewType得到布局,根据布局不同来初始化不同的布局并加载数据,这样就成了每个条目都是根据他的position来做布局的

Ⅲ android开发如图片上面的这种图文混排是怎么实现的!用到什么技术!因为是随内容改变排版的,不是

很明显就是用webview来实现的,webview加载服务器html5界面,所以界面会经常更新,html5实现这样的界面就非常简单了,一个list循环动态加载html即可实现。

Ⅳ android编程如何显示大量文本

TextView本身是可以显示大量文本的,但会左右不对齐现象,另外图文混排的时候更不适合了,建议如下
1、自定义View,显示大量文本
2、使用webview来显示大量文本

Ⅳ android图文混排,我想在文章的任意位置添加图片,不止一张,是多张图片,网上找不到类似的布局

图文并茂的话,你可以用
SpannableString ss = new SpannableString("abcdefghijklmn");
Drawable d = getResources().getDrawable(R.drawable.icon);//找到你要加入的图片
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, 0, 6, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Textview.setText()里面的参数是 char... spannablesString 是它的子类,是把图片转化成..

Ⅵ 如何实现一个 Android 端的富文本编辑器

  • 较常见的实现图文混排的办法

  1. WebView + JavaScript;

  2. EditText + Span;

  3. scrollview + view;

  • WebView +JavaScript

    webview实现富文本也就是html+css+js,不过这种的难点就是在手机客户端中的编辑问题,毕竟是webview和android view的转化问题。

  • EditText + Span

    可以很好的实现简单富文本的编辑,但是在图文混排,以及各种主要自定义的组件面前就显得捉襟见肘。

  • scrollview + view

    优点是可以实现各种各样的view,想什么组件自定义就行,而且实现比较简单,简单几句就可以实现文本插入编辑。

  • scrollview + view的实现过程

  1. 效果图:

其他

在scrollview实现一些view的添加和删除,以及组件间的拼接,就可以实现一个很简单的可定制的富文本编辑器。

Ⅶ Android设备的界面适配设计

Android设备App设计中有一个问题可能会被设计师忽略,在各种分辨率各种尺寸“杂屏”的界面适配。可能产出的界面稿在常用的720*1280的分辨率中是完美,但一到各个不同分辨率不同尺寸的设备后

这里就谈谈适配,了解适配让设计从PS、sketch到移动设备上都能完美呈现。

如此繁杂的安卓设备,采用哪个标准设计呢?

1.选择一种尺寸一种分辨率作为基准。

2.选择2-3款主流的Android设备,制定一套适配规则。(国内主流设备、分辨率可参考友盟指数)

3.部分极端效果特别注释说明。

目前移动端设计师多采用iPhone 5与6的分辨率设计,这两个分辨率也最接近Android xhdpi的720*1280,设计之后再做等比适配(不做设计元素等比适配会导致Android设备上视觉呈现较小)。

我则倾向于选取720*1280的分辨率设计。优点是处于常用分辨率的中间值,对小分辨率大分辨率调整也较容易。另外iOS@1x的320与720刚好是2.25的倍率关系,使用sketch等比输出快捷多了。(如果时间成本允许的话可以将Android的标注单位用dp,具体的设备尺寸、分辨率知识这里不详描述,可见文章最后面的“Android基础知识”)

案例说明:

雅虎新闻为各个dpi做了优化,图片等比缩放,文字区域等比缩放,并且考虑到在低dpi下会被推移至第二屏,就减小图片了高度,保持文字区域最小高度。

老司机都不会忘记的,仅提醒下新手,每个图标记得输出多个比例。并且记得查看各个比例下图标的显示效果。

案例说明:

还是拿一个雅虎新闻的例子,大家感受下。

Android设备的系统各个厂商都做了定制化,默认的字体库可能不同,且字体占空间大小可能不同。不同设备显示文字会出现不同效果。设计时考虑3点:

多采用流式布局,不对单行做字数限制(如“单行显示多少个字”“文本宽度多少”),而是定义文本容器的高宽,超出则用“…”“渐隐”或者“遮挡”等方式省略。

若较长的文本需要完整显示,设计时预留换行空间。

若文本需要在单行完整显示(如提示类文字),尽量控制字数(建议16字内),避免小屏不够放置。

案例说明:

图文混排同一行显示时,图片等比固定在右侧显示,文字部分区域宽度会因设备不同出现较大的差异,预留文字多行高度。如下图不同设备下文字的展示空间有差异,需要考虑小分辨率下预留多行文字空间。如图2第二条新闻标题文字溢出的丑陋展示,建议设定一个文字区域最大高度,超出部分则隐藏。

单行出现多个文字符素时,注意元素在低dpi下的显示层级,提前说明好该情况的覆盖或者隐藏规则。如下图第一个用户名称,在低dpi下,避免各元素交错,而省略了超出的用户名称。

图片常用的方式有固定宽度dp等比缩放高度(用于非通栏图片);固定高度dp等比缩放宽度(用于横向滚动图片,如全屏相册中的纵向图片);根据屏幕宽度等比缩放(横向通栏图片)。设计时考虑3点:

注意图片占用的宽高比,避免大屏设备上占据大量空间,导致内容比例不协调同时降低了屏幕利用率。

考虑到设备屏幕密度不同,输出图片时别忘了输出多个分辨率。

考虑图片宽高比过大的缩略图处理(最常见的处理方式:高度远大于宽度时,是给出最大区域,让图片等宽居中填充该区域,只显示该区域;宽度远大于高度时,与展示区域等高居中取部分显示。当然也可能出现特殊显示要求,需要根据具体情况具体处理。)

案例说明:

网易游戏相册的全屏浏览中,大于设备宽高比的宽图按照最大宽度放置,小于设备宽高比的高度按照最大高度放置。

一行多张图片要考虑图片的在不同设备下等比缩放带来显示效果的差异。排列时会有两种情况:

1.要求在一行内显示完,根据图片的显示效果决定放置的数量,超过则不显示(如下图1第二条新闻)

2.流式布局,当图片宽度小于设定值时自动换行(如下图2相册展示,低dpi低分辨率设备一行显示3张,高的显示4-5张,且按比例撑满屏幕宽度)。

宽高比超出设计区域时的处理,如网络贴吧中列表的小图模式,给出了正方形区域,当图片非正方形时,根据宽高中的短边等比撑满正方形区域后,截取了图片居中的部分显示。

在固定区域内多元素混合放置时,文字一般采取流式布局,图片多采用等比缩放,图标元素多采用 弹性布局,即元素内容本身规格不变,考虑水平、垂直方向的间距做相应扩展。设备屏幕越大,在扩展方向上可以显示更多内容,发挥了大屏幕的优势。

弹性布局需要给出哪一个元素dp不变,哪一个元素缩放的策略。

弹性布局下部分距离标注采用百分比标注。

当有两个等比缩放元素时考虑避免重叠的情况。

案例说明:

网易游戏的新闻列表样式,每一条新闻区域,要求图片dp不变,而文字区域进行弹性缩放。

下图网易游戏专区中间的幽灵按钮图标为确保点按效果,按照固定dp显示,中间间隔的宽度按照设备宽度的百分比来确定

网易游戏求交往的界面,中间卡片区域大小根据设备等比缩放,如中间用户头像与“同喜欢2款游戏”的文字,在设计时需要考虑产品的目标设备中最小设备下的布局显示效果,避免出现重叠的情况。而纵向的元素数量也需要如此考虑。

Android界面适配的案例说明就写到这里啦。

设计时多考虑各个元素(图标、文本、图片、区域)在不同设备的情况。当然,做设计时也不是死板的按照建议来实现,特别是固定区域下的元素放置,根据实际情况来处理即可。

Android系统的UI也在不断进化完善,随着设计趋势的改变,Android除了常见的卡片、列表、浮层外,可能会有更多的展示方式,而Android设备也是逐渐淘汰ldpi与mdpi,设备的分辨率逐渐变大。也就要求我们需要不断的去了解尝试新的设计趋势,产出最好的方案。

这不是彩蛋哈,仅仅补充安卓设备的基础知识,老司机完全可以忽略,供新手参考阅读。

为展示设备的多样化,贴出Android屏幕尺寸示意图(蓝色矩形的大小代表不同尺寸,颜色深浅则代表所占百分比的大小。)

屏幕大小以屏幕尺寸来衡量,指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米

目前的主流尺寸:5.0" ~ 5.5" (有继续往更大尺寸发展的趋势,但趋于稳定)

常见的设备尺寸: 4" ~ 10" 。

手机适配参考尺寸: 4" ~ 6"

手机 + 平板适配参考尺寸: 4" ~ 10”

屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。

屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。目前每个屏幕像素可以认为就是一个“点”。

屏幕 dpi 的计算方式:

Android 设备中 dpi 分几个段:

•ldpi:~ 120 dpi (几乎绝迹)

•mdpi:~ 160 dpi (罕见)

•hdpi:~ 240 dpi (逐渐减少中)

•xhdpi:~ 320 dpi

•xxhdpi:~ 480 dpi

•xxxhdpi:~ 640dpi (目前较少)

dp(与 dip 同义) 是在 160dpi 下每个像素对应的物理尺寸,可近似理解为:

•160 dp = 1 inch

•1 dp = 1 / 160 inch = 0.15875 mm

•1 dp = 1 px (160 dpi 屏幕下)

•1 dp = 2 px (320 dpi 屏幕下)

Android的屏幕适配指标都基于物理尺寸(即屏幕的物理大小),而非像素(分辨率)。为什么呢?这里根据dp与px适配出两种效果来说明。

按 dp 适配不同屏幕的效果如下,内容的物理尺寸变化不大:

若直接按照像素适配,出现以下情况,高像素密度的设备内容显得特别小,影响布局与可用性:

屏幕长边和短边的比例。

目前手持设备的 长边 dpi 和 短边 dpi 普遍非常接近,可认为屏幕比例和屏幕水平、垂直像素比例一致

屏幕比例目前趋于 16:9 ~ 16:10 (8:5)

因不少设备使用了虚拟按键,所以通常非全屏的 app 可用面积略低,屏幕比例更接近 16:10

Ⅷ android的listview中用自定义适配器时定义复杂底层数据类型怎么定义

方法/步骤

1

首先将适配器的View视图表现出来,使用ListView为例,代码如下。

热点内容
墙加密区域 发布:2024-11-30 02:33:32 浏览:630
idrac中怎么控制服务器 发布:2024-11-30 02:18:27 浏览:910
蜘蛛矿池服务器地址 发布:2024-11-30 02:13:57 浏览:169
网易云访问记录 发布:2024-11-30 02:13:17 浏览:376
java的数据类型有哪些 发布:2024-11-30 02:12:42 浏览:546
win8访问win7共享 发布:2024-11-30 02:08:33 浏览:340
编程录入错误 发布:2024-11-30 02:01:58 浏览:733
相机存储卡无法读取 发布:2024-11-30 02:00:15 浏览:772
美国访问学者中介 发布:2024-11-30 01:49:47 浏览:491
手机版我的世界网易服务器地铁 发布:2024-11-30 01:38:57 浏览:522