网站建设有关图片,做暧暧视频网站w,泉州网站建设手机,代理办公司注册大概多少钱动态创建TextView的两种方式#xff1a;
下面介绍两种创建方式#xff1a;
在drawable里面创建共同依赖的background.xml文件#xff0c;里面设置shape来设置文本框的一些特殊效果#xff1a;
eg#xff1a;
?xml version1.0 encodingutf-8
下面介绍两种创建方式
在drawable里面创建共同依赖的background.xml文件里面设置shape来设置文本框的一些特殊效果
eg
?xml version1.0 encodingutf-8?
shape xmlns:androidhttp://schemas.android.com/apk/res/android !-- 实心 -- solid android:colorandroid:color/white / !-- 边框 -- stroke android:width0.5dp android:colorandroid:color/black / !-- 圆角 -- corners android:radius3dp / !-- 边距 -- padding android:bottom10dp android:left10dp android:right10dp android:top10dp / !-- 渐变 -- gradient android:angle270 android:endColor#FFFF782 android:startColor#13C7AF /
/shape
代码方式
TextView textView new TextView(context);
textView.setId(id);
textView.setText(android);
textView.setTextColor(0xff999faa);
textView.setTextSize(12);
textView.setBackgroundResource(R.drawable.background);
xml配置文件和代码结合方式
textview_layout.xml?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationvertical android:layout_widthmatch_parentandroid:layout_heightmatch_parentTextViewandroid:idid/textViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textColor#999faaandroid:textSize12spandroid:backgrounddrawable/backgroundandroid:textandroid /
/LinearLayout
ViewGroup viewGroup (ViewGroup) LayoutInflater.from(this).inflate(R.layout.textiew, null);
TextView textView (TextView) findViewById(R.id.textView);
viewGroup.removeView(textView);//替换掉textId
textView.setId(id);
这样通过前面的两种方式即可创建一个TextView控件通过xxxViewGroup.addView(textView)即可将改textView加入到xxxViewGroup中。
TextView控件布局位置的控制
上面创建了textView控件但该控件的布局位置并没有确定而这个布局位置又是十分重要的否则该控件也没有存在的意义。
//此处以RelativeLayout布局为例同样LinearLayout也支持该接口
//设置RelativeLayout布局的宽高
RelativeLayout.LayoutParams reLayoutParams
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
//以下rules说明设置控件在xxxView的右侧父控件的底部
reLayoutParams.addRule(RelativeLayout.RIGHT_OF, xxxViewId)
reLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
//setMargins设置控件相对其他控件的间隔
reLayoutParams.setMargins(left, top, right, bottom);
以上代码只完成了RelativeLayout的布局rules的设置如何和待控制的控件绑定呢
xxxViewGroup.addView(textViewreLayoutParams);
为TextView添加边框
在文章开始部分创建了一个background.xml文件但并没有说明该xml文件的作用不过也容易猜到这个background.xml为textView设置了一个边框。 默认情况下TextView控件是没有边框的如何创建边框有以下方式
设置background为透明图片的背景图。通过shape设置背景图片。推荐background.xml即为这个shape配置文件对该文件各项参数的设置请参考google
对前面代码中几处关键点的说明
View.setId(int id)如何避免id冲突 按照规则每个View都必须有一个唯一的标识符这个标识符是一个正整数。而我们上面代码中动态创建的View要如何保证id的唯一性 在sdk17 以上使用myView.setId(View.generateViewId())在低于17 的版本中我们需要自己去实现一些方法参考View.Java的内部实现
private static final AtomicInteger sNextGeneratedId new AtomicInteger(1);/**
* Generate a value suitable for use in {link #setId(int)}.
* This value will not collide with ID values generated at build time by aapt for R.id.
*
* return a generated ID value
*/
public static int generateViewId() {for (;;) {final int result sNextGeneratedId.get();// aapt-generated IDs have the high byte nonzero; clamp to the range under that.int newValue result 1;if (newValue 0x00FFFFFF) newValue 1; // Roll over to 1, not 0.if (sNextGeneratedId.compareAndSet(result, newValue)) {return result;}}
}ID大于0x00FFFFFF的已经在xml中定义到了容易发生冲突。在调用的地方可以这样使用:if (Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1) {myView.setId(Utils.generateViewId());} else {myView.setId(View.generateViewId());}}
为什么要调用viewGroup.removeView(textView) 一个View只能依赖于一个父ViewGroup我们通过inflate这种方式创建的view已经属于一个ViewGroup了所以此处需要父ViewGroup先remove掉否则会报这样的错误”The specified child already has a parent. You must call removeView” 关于异常“The specified child already has a parent. You must call removeView”的解决
扩展内容—动态添加布局
前面讲到动态添加控件而布局同样可以动态添加
方法和上面类似主要注重如何控制添加的布局的位置在控制布局的位置的时候使用LayoutParam类来实现。
RelativeLayout rl new RelativeLayout(this);
//设置RelativeLayout布局的宽高
RelativeLayout.LayoutParams relLayoutParamsnew RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
xxxViewGroup.addView(rl, relLayoutParams);
控件属性相关的一些动态设置的接口
// 设置背景图
textView.setBackgroundResource(R.drawable.block_text_backgroumg);
// 设置背景透明度
textView.getBackground().setAlpha(150);
// 设定text内容为Html格式
textView.setText(Html.fromHtml(rsultText));
// 设定为可以scroll的textView
textView.setMovementMethod(ScrollingMovementMethod.getInstance());
// 设定text内容与边框的距离
textView.setPadding(6, 6, 6, 6);
参考资料
Android 利用addView 动态给Activity添加View组件 android 中使用View.setId(int id)如何避免id冲突呢