0

我想为我的游戏插入一个暂停按钮和一个高分文本,暂停按钮位于游戏视图的左上角,高分文本位于右上角。我想以编程方式对其进行编码,但没有显示高分和按钮。这是代码:

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

1 回答 1

0

您需要正确添加 LayoutParams。每个 View 都需要其父级类型的 LayoutParams。例如,您的 TextView 和 Button 需要 RelativeLayout.LayoutParams,而您的 RelativeLayout 需要 FrameLayout.LayoutParams(因为这是您在 setContentView 中添加的任何内容的内置容器)。

对于 pauseButton,将 RelativeLayout.LayoutParams 设置为 WRAP_CONTENT 和 WRAP_CONTENT,并使用规则 ALIGN_PARENT_TOP 和 ALIGN_PARENT_RIGHT。

对于文本框,添加另一个具有 WRAP_CONTENT 和 WRAP_CONTENT 以及规则 ALIGN_PARENT_TOP 和 ALIGN_PARENT_LEFT 的 RelativeLayout.LayoutParams。

那么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)。

于 2012-10-10T05:30:58.030 回答