Android(安卓)动态生成布局的方式摘要
16lz
2021-01-24
-
RadioButton 去除前面的圆圈:
布局中:android:button="@null"
代码中:RadioButton rb = new RadioButton(mContext);
rb.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
-
布局调整
设置内边距:rb.setPadding(15, 10, 15, 10);
-
RadioGroup流式布局
import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.RadioGroup;/** * 可换行 * 流式布局的RadioGroup */public class FlowRadioGroup extends RadioGroup { //设置的间距长度 private static final int len = 40; public FlowRadioGroup(Context context, AttributeSet attrs) { super(context, attrs); } public FlowRadioGroup(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int maxWidth = MeasureSpec.getSize(widthMeasureSpec); int childCount = getChildCount(); int x = 0; int y = 0; int row = 0; for (int index = 0; index < childCount; index++) { final View child = getChildAt(index); if (child.getVisibility() != View.GONE) { child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); // 此处增加onlayout中的换行判断,用于计算所需的高度 int width = child.getMeasuredWidth(); int height = child.getMeasuredHeight(); x += width + len; y = row * height + height + len * (row + 1); if (x > maxWidth) { x = width + len; row++; y = row * height + height + len * (row + 1); } } } // 设置容器所需的宽度和高度 setMeasuredDimension(maxWidth, y); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { final int childCount = getChildCount(); int maxWidth = r - l; int x = 0; int y = 0; int row = 0; for (int i = 0; i < childCount; i++) { final View child = this.getChildAt(i); if (child.getVisibility() != View.GONE) { int width = child.getMeasuredWidth(); int height = child.getMeasuredHeight(); x += width + len; y = row * height + height + len * (row + 1); if (x > maxWidth) { x = width + len; row++; y = row * height + height + len * (row + 1); } child.layout(x - width, y - height, x, y); } } }}
-
动态改变颜色和字体样式
-
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { final LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(R.layout.item_left_symptom_layout, null); viewHolder = new ViewHolder(); convertView.setTag(viewHolder); viewHolder.tv = (TextView) convertView.findViewById(R.id.tv); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tv.setText(list.get(position).getName()); if (mSelectItem == position) { viewHolder.tv.setBackgroundColor(Color.parseColor("#F4F4F4"));//背景色与主界面的FrameLayout一样 viewHolder.tv.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); } else { viewHolder.tv.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//空白图片 viewHolder.tv.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); } return convertView; } private class ViewHolder { TextView tv; } public void setSelectItem(int selectItem) { this.mSelectItem = selectItem; notifyDataSetChanged(); }
更多相关文章
- android LayoutParams 简单说明 理解 示例
- Android透明状态栏(沉浸式状态栏)
- android第五天早:抗锯齿和全屏
- AndroidX之CoordinatorLayout+AppBarLayout顶部折叠栏
- Android毕设之Fragment+TabHost(三)
- 【面包屑】快速使用RecyclerView搭建列表
- 曾经的笔记——android的学习笔记(布局和电话、短信权限)
- Android(安卓)监听软键盘显示和隐藏
- Android四大组件之activity之间带数据跳转