在这边文章中,我将会介绍如何去实现一个在Android系统中不常见的布局:文字围绕图片布局。
这个布局并不属于Android模式,但在处理相同的情景下,它是一样的实用。
在你正式使用它到实践项目前,你需对其进行一定的修改,毕竟它只是一个例子代码
以下是例子的布局:
<ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content"></TextView> <ImageView android:id="@+id/icon" android:src="@drawable/rectangle" android:layout_width="150dp" android:layout_height="150dp"></ImageView> </RelativeLayout> </ScrollView>
你可以使用 LeadingMarginSpan.LeadingMarginSpan2 来实现我们的布局。
通过实现LeadingMarginSpan.LeadingMarginSpan2 接口,我们可以指定”围绕段落“的行数以及“段落的第一行”和被围绕对象的边距。
class MyLeadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2 { private int margin; private int lines; MyLeadingMarginSpan2(int lines, int margin) { this.margin = margin; this.lines = lines; } /** * Apply the margin * * @param first * @return */ @Override public int getLeadingMargin(boolean first) { if (first) { return margin; } else { return 0; } } @Override public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {} @Override public int getLeadingMarginLineCount() { return lines; } };
我们只需要计算文本需要的行数,以及其实际的边距和右边距。
在这里,我们所需的行数=图片的高度,边距=图片的宽度+一点点额外的边距。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.text); mImageView = (ImageView) findViewById(R.id.icon); final ViewTreeObserver vto = mImageView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mImageView.getViewTreeObserver().removeOnGlobalLayoutListener(this); finalHeight = mImageView.getMeasuredHeight(); finalWidth = mImageView.getMeasuredWidth(); makeSpan(); } }); } }
我的实现简单而原始,用 float textLineHeight = mTextView.getPaint().getTextSize(); 计算文本的行数。读者可以通过添加一些padding,margin 或者你也可以通过类Rect来计算文本的四条边等方式来改善一下代码的效果:
/** * This method builds the text layout */ private void makeSpan() { /** * Get the text */ String plainText=getResources().getString(R.string.text_sample); int allTextStart = 0; int allTextEnd = htmlText.length() - 1; /** * Calculate the lines number = image height. * You can improve it... it is just an example */ int lines; Rect bounds = new Rect(); mTextView.getPaint().getTextBounds(plainText.substring(0,10), 0, 1, bounds); //float textLineHeight = mTextView.getPaint().getTextSize(); float fontSpacing=mTextView.getPaint().getFontSpacing(); lines = (int) (finalHeight/fontSpacing); /** * Build the layout with LeadingMarginSpan2 */ MyLeadingMarginSpan2 span = new MyLeadingMarginSpan2(lines, finalWidth +10 ); mSpannableString.setSpan(span, allTextStart, allTextEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mTextView.setText(mSpannableString); }
本文由zhiweiofli编辑发布,转载请注明出处,谢谢。
相关推荐
文字排版,特别是在Pad上,由于屏幕大,所以经常会用到图文混排的方式。该项目就是基于Android开发的非html实现的图文混排。注释详细,一看就懂!
实现了地图上A-Z字母的图片创建工作,后期工作根据信息在地图上标注在进一步实现中
在Android开发中经常会需要用到带文字和图片的button,下面来给大家介绍使用radiobutton实现图片和文字上下布局或左右布局。代码很简单就不给大家多解释了。 布局文件很简单,用来展示RadioBUtton的使用方法。 <...
android 将文字转换成图片 测试代码
android 布局中网格视图 ListView的简单运用 采用的是最简单的ArrayAdapter适配器
http://blog.csdn.net/yanjunhui2011/article/details/78274608 对应资源
android实现六边形等不规则布局,android不规则按钮布局
仿美图秀秀在图片上添加文字,用户可对文字进行自主编辑,文字大小缩放,字体样式更换,文字颜色更换 (这里我就完善了添加文字部分,公司需求),还有其他功能滤镜,水印等 绝对给力。。记得先看里面的text文本
欢迎来下载RecyclerView实现复杂界面,本demo是由本人去多方百度参考后写成, 易于会ListView的小伙伴们理解,如demo有问题可以加QQ:731712249(加Q请说明来意),也可以加入Android交流群讨论:586620031
Android 布局生成微信分享图片,需要的小伙伴们可以下载看看!我们互相学习!!
Android 实现伸缩弹力分布菜单效果(直线型布局)源码 很好的动画效果
Android没有提供在图片上写文字的控件,如果在按钮上直接写文字的话,图片和文字就重叠。
Android仿微信ui圆角布局界面的实现
android实现拖动上传图片和文字至服务器,自定义可拖动的EditText
而本博文将通过实例实现自定义...3.在2的基础上新建一个Camera Preview布局文件; 4.设置一个拍照的监听事件,例如单击按钮事件等; 5.实现拍照,并保存拍照后的图片到设备; 6.释放Camera,以方便其他应用可以使用。
Android实现图片左右滑动效果 代码很简单,就一个Activity,很好学习的 可以联系我一起学习,交流哈
Android 自定义ViewGroup实现整个Item布局竖直跑马灯效果,详细看我的博客讲解
实现Android中WebView图片的缓存,并且实现如何替换WebView中默认图片以及如何实现图片的点击。
使用卷轴视图和gallery实现文字和图片的上下左右滑动,用布局前套方式设计布局样式