如何理解以编程方式将小部件放置在 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);
}
}
我目前正在使用 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);
}
}