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

时间:2015-04-18 15:33:05

标签: android android-layout view

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

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);

1 个答案:

答案 0 :(得分:1)

我想如果你从surfaceView中访问画布就足够了。如果你使用onSizeChange,会更有效率 对于宽度和高度,但我猜画布getWidth和getHeight就足够了。另外我的例子只是绘制一旦表面创建,你将必须制作自己的更新逻辑。我也放弃了相对布局,但我认为这可满足您的需求:

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);
    }
}