以编程方式编辑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_内容);我已经将它们都设置为包装内容