如何理解以编程方式将小部件放置在 android 布局中的什么位置?

How to understand where you put your widgets in android layouts programmatically?

我目前正在使用 surfaceview 制作一个简单的游戏,但我发现很难在 android 中以编程方式在相对布局中定位按钮或文本。例如,在下面的示例中,我在相对布局中设置了带有文本的相对布局,我想将它设置在屏幕的右侧,右侧边距很少。我应该如何理解我将内容定位在哪里?是否有一些关于以编程方式定位内容的技巧?

RelativeLayout Rs = new RelativeLayout(this);
        Rs.setBackgroundResource(R.drawable.btn);
        Rs.setGravity(Gravity.CENTER);
        Regame.addView(RR,400,150);
        Rs.setX(0);
        txt= new TextView(this);

我想如果您从 surfaceView.Probably 中访问 canvas 就足够了 如果您使用 onSizeChange 会更有效率 对于宽度和高度,但我猜 canvas getWidth 和 getHeight 会 suffice.Also 我的例子只是在创建表面后绘制,你必须自己更新 logic.Also 我是放弃相对布局,但我认为这可以满足您的需求:

public class GameView extends SurfaceView {
    protected SurfaceHolder holder;

    public GameView(Context context) {
        super(context);
        holder = getHolder();
        holder.addCallback(new SurfaceHolder.Callback() {                
            public void surfaceCreated(SurfaceHolder holder) {
                Canvas c = holder.lockCanvas(null);
                onDraw(c);
                holder.unlockCanvasAndPost(c);
            }
        });
    }

    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint(); 
        paint.setColor(Color.BLACK); 
        paint.setTextSize(20); 
        int width=canvas.getWidth();
        int height=canvas.getHeight();
        //Just for example
        int desiredHeight=height/2;
        int desiredMargin=10;
        String desiredText="Some text";
        int textWidth=Math.round(paint.measureText(desiredText));
        int desiredWidth=width-textWidth-desiredMargin;
        canvas.drawText(desiredText, desiredWidth,desiredHeight, paint);
    }
}