今天在做一个自定义View的过程中产生了一个奇妙的情况,先来描述一下我的View:
这个View衍生于LinearLayout,由左右两个EditText构成,两者属性基本一致,代码如下:
public TagEditView(Context context, AttributeSet attrs) {
..........
//组件内部Text与自身边界的距离
m_Tag.setPadding(3, 3, 3, 3);
m_EditText.setPadding(3, 3, 3, 3);
//布局属性
m_Tag.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
m_Tag.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
m_Tag.setSingleLine(true);
m_EditText.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
m_EditText.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
m_EditText.setSingleLine(true);
..........} protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
//m_Tag.setHeight(m_Tag.getHeight()+10);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
结果正常,两者对齐,如图:现在少量修改并出现情况如下:
1、 //在构造函数中
m_Tag.setPadding(3,3,3,3); //OnMearsure中
m_Tag.setHeight(m_Tag.getHeight.()+10);
结果正常,两者对齐,如图:2、 //在构造函数中
m_Tag.setPadding(0,0,0,0); //OnMearsure中
//m_Tag.setHeight(m_Tag.getHeight.()+10);
结果异常,两者不对齐,如图:3、 //在构造函数中
m_Tag.setPadding(0,0,0,0); //OnMearsure中
m_Tag.setHeight(m_Tag.getHeight.()+10);
结果正常,两者对齐,如图:
个人想法:很明显padding在background的填充面积上有了影响,但是这种影响似乎是在系统计算View之前产生的从而影响了起面积,当有我们主动在OnMearsure中修改计算量(height)时,原来的padding的作用就被刷新了,从而直接对我们设置的量作出反应。
思绪还是有点凌乱,看下各路英雄都有什么想法?
这个View衍生于LinearLayout,由左右两个EditText构成,两者属性基本一致,代码如下:
public TagEditView(Context context, AttributeSet attrs) {
..........
//组件内部Text与自身边界的距离
m_Tag.setPadding(3, 3, 3, 3);
m_EditText.setPadding(3, 3, 3, 3);
//布局属性
m_Tag.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
m_Tag.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
m_Tag.setSingleLine(true);
m_EditText.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
m_EditText.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
m_EditText.setSingleLine(true);
..........} protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
//m_Tag.setHeight(m_Tag.getHeight()+10);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
结果正常,两者对齐,如图:现在少量修改并出现情况如下:
1、 //在构造函数中
m_Tag.setPadding(3,3,3,3); //OnMearsure中
m_Tag.setHeight(m_Tag.getHeight.()+10);
结果正常,两者对齐,如图:2、 //在构造函数中
m_Tag.setPadding(0,0,0,0); //OnMearsure中
//m_Tag.setHeight(m_Tag.getHeight.()+10);
结果异常,两者不对齐,如图:3、 //在构造函数中
m_Tag.setPadding(0,0,0,0); //OnMearsure中
m_Tag.setHeight(m_Tag.getHeight.()+10);
结果正常,两者对齐,如图:
个人想法:很明显padding在background的填充面积上有了影响,但是这种影响似乎是在系统计算View之前产生的从而影响了起面积,当有我们主动在OnMearsure中修改计算量(height)时,原来的padding的作用就被刷新了,从而直接对我们设置的量作出反应。
思绪还是有点凌乱,看下各路英雄都有什么想法?
解决方案 »
- android如何获取一个SD卡指定文件夹的图片Uri uri问题
- android如何确保广播接收者第一个接收到广播?
- 关于android访问本地mysql数据库
- android的LocationListener一定要写在当前activity中嘛?
- 请教手动接受GPS数据
- android Gallery用法
- 本人新手,关于android advice chooser target unkno急急急~
- 大家都用什么开发手机App啊,哪个好?
- 关于WebView和js的问题,急急急!!!
- 求教,根据下图信息能够计算出手机屏幕的物理尺寸吗?
- aptana3.4.2在eclipse中的插件,如何设置其背景色,现在是黑的看不清
- app手机网站开发
上面的几个图只能说明height的问题,及时你不加padding也是上面几种结果。
padding只是内边距,和外边距没关系。第二个图的错位只决定于height
问题解决,在此结贴!