以编程方式编辑Android SFGameView布局
我想为我的游戏插入暂停按钮和高分文本,暂停按钮在游戏视图的左上角,高分文本在右上角。我想编程,但高分和按钮没有显示。代码如下:以编程方式编辑Android SFGameView布局,android,layout,opengl-es,Android,Layout,Opengl Es,我想为我的游戏插入暂停按钮和高分文本,暂停按钮在游戏视图的左上角,高分文本在右上角。我想编程,但高分和按钮没有显示。代码如下: gameView = new SFGameView(this); RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayo
gameView = new SFGameView(this);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.FILL_PARENT);
TextView textBox = new TextView(SFEngine.context);
textBox.setText("HIGH SCORE");
textBox.setId(1);
Button pauseButton = new Button(SFEngine.context);
pauseButton.setText("PAUSE");
pauseButton.setGravity(Gravity.RIGHT);
RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.RIGHT_OF, textBox.getId());
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
layout.addView(textBox);
layout.addView(pauseButton,lp);
layout.addView(gameView,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
setContentView(layout,rlp);
这是按钮侦听器,按钮不会响应触摸事件
pauseButton.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent e) {
try{
Thread.sleep(1000);
}
catch(InterruptedException ex){
}
return true;
}
});
您需要正确添加LayoutParams。每个视图都需要其父视图类型的LayoutParams。例如,TextView和按钮需要RelativeLayout.LayoutParams,RelativeLayout需要FrameLayout.LayoutParams(因为这是在setContentView中添加的任何内容的内置容器) 对于pauseButton,将RelativeLayout.LayoutParams设置为WRAP_CONTENT&WRAP_CONTENT,规则为ALIGN_PARENT_TOP&ALIGN_PARENT_RIGHT 对于文本框,添加另一个RelativeLayout.LayoutParams,其中包含WRAP_CONTENT和WRAP_CONTENT以及规则ALIGN_PARENT_TOP和ALIGN_PARENT_LEFT 然后,名为layout的RelativeLayout需要FrameLayout.LayoutParams与MATCH_PARENT和MATCH_PARENT匹配 示例代码:
RelativeLayout layout = new RelativeLayout(this);
layout.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
SFGameView game = new SFGameView(this);
game.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
Button btn = new Button(this);
btn.setText("||");
RelativeLayout.LayoutParams btnLP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
btnLP.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
btnLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
btn.setLayoutParams(btnLP);
TextView tv = new TextView(this);
tv.setText("Some Text");
RelativeLayout.LayoutParams textLP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
textLP.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
textLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
tv.setLayoutParams(textLP);
layout.addView(game);
layout.addView(btn);
layout.addView(tv);
setContentView(layout);
至于听众。使用setOnClickListener(而不是onTouch)。我已经编辑了我的代码,并按照您的建议操作,但它仍然不会显示,屏幕上只显示我的游戏。我将我的gameview设置为对齐\u parent\u bottom。在其他两个视图之前将gameview添加到布局中。它出现了,但按钮似乎占据了所有空间,并且高分文本位于其顶部,我尝试设置按钮。设置高度和设置重量仍然不起作用,那么您不必设置按钮(可能还有文本视图)包装内容的LayoutParams&包装内容?例如,新的RelativeLayout.LayoutParams(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);我已经将它们都设置为包装内容