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 を正しく追加する必要があります。各ビューには、その親のタイプの LayoutParams が必要です。たとえば、TextView と Button には RelativeLayout.LayoutParams が必要で、RelativeLayout には FrameLayout.LayoutParams が必要です (これは、setContentView に追加するすべての組み込みコンテナーであるため)。

pauseButton については、RelativeLayout.LayoutParams を WRAP_CONTENT および WRAP_CONTENT に設定し、ルール ALIGN_PARENT_TOP および ALIGN_PARENT_RIGHT を使用します。

textBox には、WRAP_CONTENT と WRAP_CONTENT およびルール ALIGN_PARENT_TOP と ALIGN_PARENT_LEFT を使用して別の RelativeLayout.LayoutParams を追加します。

次に、RelativeLayout という名前のレイアウトには、MATCH_PARENT と MATCH_PARENT を含む FrameLayout.LayoutParams が必要です。

コード例:

    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 に答える