2023年7月13日发(作者:)
AndroidLinearLayout中TextView标签项⾃动换⾏的⼀种解决⽅案在⼀些项⽬中,⽐如搜索,⼴告热门关键词等等都会⽤到下⾯这种效果的排版,如下图:其实最通⽤的实现⽅案是⾃定义⼀个ViewGroup,然后⾃⼰计算布局。但是这种⽅式对于⼀些对⾃定义控件不太熟悉的⼈来说,有些难度,这⾥有⼀个通过拼凑的⽅法实现这种效果,下⾯是源代码,偷懒了⼀下,不想封装了,直接就写在⼀个Activity⾥⾯,谁有需要,⾃⼰去优化:import ty;import ;import ;import Inflater;import oup;import Params;import Layout;import ew;public class TextViewItemActivity extends Activity { private boolean isFristTime = true; /** 标签之间的间距 px */ final int itemMargins = 50; /** 标签的⾏间距 px */ final int lineMargins = 50; private ViewGroup container = null; private String[] tags = { "⼤约在冬季", "漂洋过海的来看你", "天下有情⼈", "我很认真", "夜夜夜夜", "想你的夜", "背叛", "趁早", "旧情绵绵", "谁明浪⼦⼼", "安妮", "说谎的爱⼈", "不浪漫的罪名", "不愿⼀个⼈", "风吹麦浪" }; @Override protected void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(ew_layout); container = (ViewGroup) findViewById(ner); } @Override public void onWindowFocusChanged(boolean hasFocus) { owFocusChanged(hasFocus); if (hasFocus && isFristTime) { isFristTime = false; final int containerWidth = suredWidth() - dingRight() - dingLeft(); final LayoutInflater inflater = getLayoutInflater(); final LayoutInflater inflater = getLayoutInflater(); /** ⽤来测量字符的宽度 */ final Paint paint = new Paint(); final TextView textView = (TextView) e(_textview, null); final int itemPadding = poundPaddingLeft() + poundPaddingRight(); final Params tvParams = new Params(_CONTENT, _CONTENT); gins(0, 0, itemMargins, 0); tSize(tSize()); LinearLayout layout = new LinearLayout(this); outParams(new Params(_PARENT, _CONTENT)); entation(NTAL); w(layout); final Params params = new Params(_PARENT, _CONTENT); gins(0, lineMargins, 0, 0); /** ⼀⾏剩下的空间 **/ int remainWidth = containerWidth; for (int i = 0; i < ; ++i) { final String text = tags[i]; final float itemWidth = eText(text) + itemPadding; if (remainWidth > itemWidth) { addItemView(inflater, layout, tvParams, text); } else { resetTextViewMarginsRight(layout); layout = new LinearLayout(this); outParams(params); entation(NTAL); /** 将前⾯那⼀个textview加⼊新的⼀⾏ */ addItemView(inflater, layout, tvParams, text); w(layout); remainWidth = containerWidth; } remainWidth = (int) (remainWidth - itemWidth + 0.5f) - itemMargins; } resetTextViewMarginsRight(layout); } } /***************** 将每⾏最后⼀个textview的MarginsRight去掉 *********************************/ private void resetTextViewMarginsRight(ViewGroup viewGroup) { final TextView tempTextView = (TextView) ldAt(ldCount() - 1); tempTextView .setLayoutParams(new Params(_CONTENT, _CONTENT)); } private void addItemView(LayoutInflater inflater, ViewGroup viewGroup, LayoutParams params, String text) { final TextView tvItem = (TextView) e(_textview, null); t(text); w(tvItem, params); }}Activity的Layout⽂件
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689215648a222221.html
评论列表(0条)