label面板
来源:互联网 发布:淘宝买aj哪家店好 编辑:程序博客网 时间:2024/04/28 02:23
/** * * 用户输入时的联想词展示 */public class SuggestLabelView extends LinearLayout implements View.OnClickListener { /** 控件总行数 **/ private int MAX_LINE = 3; /** * 按钮总行数 * */ private int columns = 0; /** * 设置子view的宽度外部设定,需要根据子view的宽度布局换行时会用 * */ private int mCellWidth = 0; /** * 设置子view的高度 * */ private int mCellHeight = 0; /** * //layout总宽度 * */ int layoutTotalWidth = 0; /** * 子控件的间距* */ int mLabelPadding = 0; /** * 夜间模式相关 */ private int SUGESSTION_HIGH_LINE_COLOR = Color.parseColor("#14b428"); private int SUGESSTION_HIGH_HISTROY_COLOR = Color.parseColor("#7777cc"); private int mSugTextColor; private int mSugBg; /** * 一定时间内屏蔽点击 防止重复点击导致触发多次 */ private BtnDisableHandler mDisableBtnHandler; private final int EVENT_SEARCH_BTN_RELEASE = 1; private boolean mIsSearchEnable = true; //搜索回调 private SearchFloatFragmentController searchFloatFragmentController; public SuggestLabelView(Context context) { super(context); setOnClickListener(this); initSize(); } public SuggestLabelView(Context context, AttributeSet attrs) { super(context, attrs); setOnClickListener(this); initSize(); } private void initSize() { Resources resources = QihooApplication.getInstance().getResources(); int displayWidth = resources.getDisplayMetrics().widthPixels; layoutTotalWidth = displayWidth; mLabelPadding = resources.getDimensionPixelSize(R.dimen.float_fragment_label_margin); mCellHeight = resources.getDimensionPixelSize(R.dimen.float_fragment_label_height); mDisableBtnHandler = new BtnDisableHandler(); } public int getLayoutTotalWidth() { return layoutTotalWidth; } public void setLayoutTotalWidth(int layoutTotalWidth) { this.layoutTotalWidth = layoutTotalWidth; } public int getmCellWidth() { return mCellWidth; } public void setmCellWidth(int mCellWidth) { this.mCellWidth = mCellWidth; } public int getmCellHeight() { return mCellHeight; } public void setmCellHeight(int mCellHeight) { this.mCellHeight = mCellHeight; } public void setLabelTextColor(int color) { mSugTextColor = color; } public void setLabelBackgroundResource(int resid) { mSugBg = resid; } public void setMaxLine(int line){ MAX_LINE = line; } /** * 根据LinearLayout总宽度自动匹配布局 */ public void autoLayout() { int cellWidth = 0;// 子控件宽 int cellHeight = 0;// 子控件高 int totalWidth = 0;// 每一行总宽度// int lineNum = 1; int x = mLabelPadding; int y = mLabelPadding; int count = getChildCount(); for (int j = 0; j < count; j++) { LogUtils.i("label", "---------------------"); View childView = getChildAt(j); // 获取子控件Child的宽高 cellWidth = getChildWidth(childView); cellHeight = mCellHeight; LogUtils.i("label", "autoLayout w=" + cellWidth + ", h=" + cellHeight); childView.layout(x, y, x + cellWidth, y + cellHeight); LogUtils.i("label", "x before=" + x); x += cellWidth + mLabelPadding; totalWidth = x; LogUtils.i("label", "x after=" + x); LogUtils.i("label", "autoLayout totalWidth=" + totalWidth + ", getLayoutTotalWidth=" + getLayoutTotalWidth()); if (totalWidth > this.getLayoutTotalWidth()) { // 换行 x = mLabelPadding; y += cellHeight + mLabelPadding;// num++; childView.layout(x, y, x + cellWidth, y + cellHeight); x += cellWidth + mLabelPadding;// if (++lineNum > MAX_LINE)// break; } else {// x += cellWidth;// totalWidth += x; } } } /** * 获取行数 * @return */ private int getLineNum() { int cellWidth = 0;// 子控件宽 int cellHeight = 0;// 子控件高 int totalWidth = 0;// 每一行总宽度 int num = 1; //行数 int x = mLabelPadding; int y = 0; int count = getChildCount(); for (int j = 0; j < count; j++) { View childView = getChildAt(j); // 获取子控件Child的宽高 cellWidth = getChildWidth(childView); cellHeight = mCellHeight;// childView.layout(x, y, x + cellWidth, y + cellHeight); x += cellWidth + mLabelPadding; totalWidth = x; if (totalWidth > this.getLayoutTotalWidth()) { // 换行 x = mLabelPadding; totalWidth = 0; y += cellHeight + mLabelPadding; num++;// childView.layout(x, y, x + cellWidth, y + cellHeight); x += cellWidth + mLabelPadding; totalWidth = x; } else {// x += cellWidth;// totalWidth += x; } } return num; } /** * 自动换行模式 * @param widthMeasureSpec * @param heightMeasureSpec */ public void onMeasureByChildContent(int widthMeasureSpec, int heightMeasureSpec) { int count = getChildCount(); int layoutWidth = 0; int childHeight = 0; // 子view的高// int a = this.getLayoutParams().width;// int b = this.getLayoutParams().height;// LogUtils.e("label", "getLayoutParams宽度"+a+", " + "getLayoutParams高度"+ b ) ; // 设置子空间Child的宽高 LogUtils.i("label", "onMeasure count=" + count); for (int i = 0; i < count; i++) { View childView = getChildAt(i); layoutWidth += getChildWidth(childView); childHeight = mCellHeight; LogUtils.i("label", "onMeasure layoutw=" + layoutWidth + ", h=" + childHeight); } int lineNum = getLineNum(); lineNum = lineNum > MAX_LINE ? MAX_LINE : lineNum; int layoutHeight = count == 0 ? 0 : lineNum * childHeight + (lineNum + 1) * mLabelPadding; // 设置容器控件所占区域大小 setMeasuredDimension(resolveSize(layoutWidth, widthMeasureSpec), resolveSize(layoutHeight, heightMeasureSpec)); LogUtils.i("label", "............onMeasure lineNum=" + lineNum); // layoutTotalWidth = this.getWidth() ;// LogUtils.i("label", "************************" + layoutTotalWidth); } /** * 控制子控件的换行 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { LogUtils.i("label", "........onLayout");// byChildWidthLayout(changed, l, t, r, b); autoLayout(); } /** * 计算控件及子控件所占区域 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { LogUtils.i("label", "........onMeasure"); onMeasureByChildContent(widthMeasureSpec, heightMeasureSpec);// onMeasureByChildWidth(widthMeasureSpec, heightMeasureSpec); } private int getChildWidth(View childView) { /*if (childView.getWidth() != 0) { LogUtils.i("label","getChildWidth return width="+childView.getWidth()); return childView.getWidth(); }*/ int cellWidth = 0;// int cellHeight = 0; TextView textView = (TextView) childView; Paint p = textView.getPaint(); String text = textView.getText().toString();// LogUtils.i("label",text); Rect rect = new Rect(); p.getTextBounds(text, 0, text.length(), rect); cellWidth = rect.width() + childView.getPaddingLeft() + childView.getPaddingRight();// cellHeight = rect.height() + childView.getPaddingTop() + childView.getPaddingBottom();// LogUtils.i("label", "getChildWidth w="+cellWidth); cellWidth += 10; //getTextBounds方法有误差 需要加几个像素确保显示完整 if (cellWidth + mLabelPadding * 2 > layoutTotalWidth) { //限制子控件的最大宽度 cellWidth = layoutTotalWidth - (mLabelPadding * 2 + 10); } return cellWidth; } //设置数据data接口public void setGuessULikeData(ArrayList<LikeItemData> likeData) {int childCount = getChildCount(); int listSize = likeData.size(); for (int i = 0; i < listSize; i++) { LikeItemData item = likeData.get(i); if(item.getTitle().length() == 1){ String s = item.getTitle().replaceAll("[A-Za-z]", ""); if(TextUtils.isEmpty(s)){ continue;//如果只有一个字母,如 a、 s等,过滤掉 } } TextView tv; if (i < childCount) { //更新现有的TextView tv = (TextView) getChildAt(i); } else { tv = new TextView(this.getContext()); setTextViewParams(tv); } tv.setText(item.getTitle()); tv.setTextColor(mSugTextColor); WidgetUtils.HighLightWords(tv, "", SUGESSTION_HIGH_LINE_COLOR); tv.setOnClickListener(this); if (i >= childCount) { this.addView(tv); } } if (childCount > listSize) { this.removeViews(listSize, childCount - listSize); }} /** * 设置TextView样式 * @param tv */ private void setTextViewParams(TextView tv) { Resources r = QihooApplication.getInstance().getResources(); tv.setTextSize(15); tv.setHeight(r.getDimensionPixelSize(R.dimen.float_fragment_label_height));// tv.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,// ViewGroup.LayoutParams.WRAP_CONTENT));//tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); tv.setGravity(Gravity.CENTER_VERTICAL);//RelativeLayout.LayoutParams textViewLp = (RelativeLayout.LayoutParams) tv//.getLayoutParams();//textViewLp.addRule(RelativeLayout.CENTER_VERTICAL); //TODO 此TextView的字体不知为何不居中 只能先以padding实现居中 int paddingLeft = r.getDimensionPixelSize(R.dimen.float_fragment_label_padding_left); int paddingTop = r.getDimensionPixelSize(R.dimen.float_fragment_label_padding_top); int paddingRight = r.getDimensionPixelSize(R.dimen.float_fragment_label_padding_right); int paddingBottom = r.getDimensionPixelSize(R.dimen.float_fragment_label_padding_bottom); tv.setPadding(paddingLeft,paddingTop,paddingRight,paddingBottom); tv.setBackgroundResource(mSugBg); tv.setTextColor(mSugTextColor); tv.setSingleLine(true); } public void setSearchFloatFragmentController(SearchFloatFragmentController controller) { this.searchFloatFragmentController = controller; } @Override public void onClick(View v) { if (v != null && searchFloatFragmentController != null && v instanceof TextView) { if (mIsSearchEnable) { String query = ((TextView) v).getText().toString().trim(); String src = Constant.SRC_INDEX_SUG; try{ src = TextUtils.isEmpty(searchFloatFragmentController.getQuery()) ? Constant.SRC_INDEX_SUG : Constant.SRC_RESULT_SUG; }catch(Exception e){} searchFloatFragmentController.doSearch(query, src); if (mDisableBtnHandler != null) { mIsSearchEnable = false; mDisableBtnHandler.sendEmptyMessageDelayed(EVENT_SEARCH_BTN_RELEASE, 500); } } } } private class BtnDisableHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_SEARCH_BTN_RELEASE: mIsSearchEnable = true; break; default: break; } } }}
0 0
- label面板
- NGUI label无法编译,Inspector面板呈灰色
- 面板
- label
- Label
- label
- Label
- label
- Label
- label
- label
- label
- Label
- label
- label 调整label高度
- Label字体大小自适应label
- Label--Label自适应
- Symbian 面板
- [C++]Valid Palindrome 有效回文
- 画类图的使用工具介绍-startUML
- Centos 使用YUM安装MariaDB
- AIXnfs到linux全库迁移
- 移动端技术简单分析
- label面板
- http协议中的get与post方法区别分析
- CodeForces 555A Case of Matryoshkas 娃娃组装
- 华为AR系列路由器密码重置
- ISP模块之色彩增强算法--HSV空间Saturation通道调整
- 奇偶排序
- ::和.的区别
- rust raw pointer使用方法(2)
- window.prompt提示框点击取消后返回的是"",点击确定后返回的是用户输入内容。