2

Android開発者にとってはまったく新しいもので、小さなコードで何が壊れているのかを理解しようとしています.

私は相対レイアウトを持っています(これが私のニーズに最も合っていると思います)。activity_main.xml ファイルで指定した行に 2 つのボタンが一緒に配置されています。ボタンの 1 つを押すと、最後の項目セットの下の同じ行に EditText フィールドとボタンが繰り返し表示されるようにします。このようなちょっと:

ボタン ボタン

| | _ _| ボタン

私の関数は、最初のタップで期待する場所に EditText を追加しますが、最終的には次のような 3 つのボタンの行になります。

ボタン ボタン ボタン

| | _ _|

コードは以下のとおりです。相対レイアウトについて何か不足していますか? 私はひどく失敗した方法で要素にアクセスしていますか?

//Get main layout as defined in activity_main.xml
        final RelativeLayout rl = (RelativeLayout)this.findViewById(R.id.rootLayout);


        //Setup rules
        final RelativeLayout.LayoutParams below = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        final RelativeLayout.LayoutParams right = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);      

        newTimer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                below.addRule(RelativeLayout.BELOW,rl.getChildAt(rl.getChildCount()-1).getId() );

                EditText timerName = new EditText(MainActivity.this);
                Button btnAddNewTimer = new Button(MainActivity.this);

                timerName.setText("New Timer");
                timerName.setVisibility(View.VISIBLE);
                timerName.setLayoutParams(below);

                rl.addView(timerName);

                right.addRule(RelativeLayout.RIGHT_OF,rl.getChildAt(rl.getChildCount()-1).getId());

                btnAddNewTimer.setText("Add");
                btnAddNewTimer.setVisibility(View.VISIBLE);
                btnAddNewTimer.setLayoutParams(right);

                rl.addView(btnAddNewTimer);

            }
        });
4

2 に答える 2

1

何らかの理由で、ビューに追加されright.addRuleた新しい子をカウントしていないと考えてください。timerName

をedittextbtnAddNewTimerの右側に配置する必要があることがわかっているので、 を に渡してみてください。timerNametimerName idright.addRule

だから代わりに..

right.addRule(RelativeLayout.RIGHT_OF,rl.getChildAt(rl.getChildCount()-1).getId());

試す...

right.addRule(RelativeLayout.RIGHT_OF, timerName.getId());

お役に立てれば。

于 2013-08-01T03:06:04.753 に答える