更改查看位置

时间:2011-08-27 21:56:05

标签: java android layout view position

我的视图不是以编程方式生成的,但可以通过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中调用布局函数没有任何意义。还有其他选择吗?

3 个答案:

答案 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,我相信它会做你需要的。