我的视图不是以编程方式生成的,但可以通过findbyid函数找到它。在获得视图后,我喜欢正确定位。
为此,我使用layout函数在给定参数的onCreate中更改视图的位置。问题是工作不正常,视图停留在左上角。
在加载活动后使用onTouch时,函数正常工作。我做错了,还有另一个根据layout使用的这四个参数来设置视图。
编辑:
Params从DB加载。 这就是我在onCreate中使用的内容:
setContentView(R.layout.baseview);
View view=(ImageView) findViewById(R.id.blah);
int top=cursor.getInt(cursor.getColumnIndex(CallerViewDB.TOP));
int bottom=cursor.getInt(cursor.getColumnIndex(CallerViewDB.BOTTOM));
int left=cursor.getInt(cursor.getColumnIndex(CallerViewDB.LEFT));
int right=cursor.getInt(cursor.getColumnIndex(CallerViewDB.RIGHT));
view.layout(left, top, right, bottom);
加载的值是正确的,检查它sqllite浏览器。似乎在onCreate中调用布局函数没有任何意义。还有其他选择吗?
答案 0 :(得分:5)
在经过一些研究后,确定如何完成:
RelativeLayout.LayoutParams parms=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
parms.leftMargin=left;
parms.rightMargin=right;
parms.topMargin=top;
parms.bottomMargin=bottom;
view.setLayoutParams(parms);
答案 1 :(得分:1)
/**
onPreDraw: Callback method to be invoked when the view tree is about to be
drawn. At this point, all views in the tree have been measured and given a
frame. Clients can use this to adjust their scroll bounds or even to request
a new layout before drawing occurs.
*/
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
OnPreDrawListener onPreDrawListener = new OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
view.layout(....);
return true;
}
};
viewTreeObserver.addOnPreDrawListener(onPreDrawListener);
答案 2 :(得分:0)
在大多数情况下,这是一个非常糟糕的主意。 Android设备的屏幕尺寸,方向和分辨率各不相同。建议您不要使用绝对定位,而应使用相对定位。
阅读RelativeLayout,我相信它会做你需要的。