0

私はAndroidを初めて使用し、xmlなしでAndroidAPIを使用して要素を水平に配置しようとしています。

私がやろうとしているのは、RadioButtonsとEditTextを水平に配置することです。何かのようなもの:

R-----E
R-----E

私はこのようなコードを試しました:

RadioGroup rg = new RadioGroup(this); //create the RadioGroup
rg.setOrientation(RadioGroup.VERTICAL);//or RadioGroup.VERTICAL
for(Map.Entry<String,String> entry : storedCards.entrySet())
{
    RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT);
    EditText ed = new EditText(this);
    RadioButton rb  = new RadioButton(this);
    rb.setId(counter++);

    lp2.addRule(RelativeLayout.RIGHT_OF,rb.getId());
    ed.setLayoutParams(lp2);

    rg.addView(rb); //the RadioButtons are added to the radioGroup instead of the layout
    rb.setText(entry.getKey());
    relativeLayout.addView(ed);
}

これは機能しません。しかし、これは私がやろうとしていることです。まず、counter変数を使用して各ラジオボタンのIDを設定し、次を使用してそのラジオボタンの右側のサイトにedittextビューを設定しようとしています。

lp2.addRule(RelativeLayout.RIGHT_OF,rb.getId());

しかし、私は適切な結果を得ていません。私はこのようになるだけです:

ER
R

すべてEditTextが重複しています。どこで間違いを犯しているのですか?

前もって感謝します。

4

1 に答える 1

1

RelativeLayoutビューが含まれていない他のビューと比較してビューを配置することは期待できません。は、に追加されていないためRelativeLayout、のIDを理解していません。RadioButtonsその結果、(これは単なる)をRadioButton除いて他のレイアウトに追加された場合、ユーザーがチェックするためにそれらをタップしたときにおそらく探している相互排除ロジックはありません。RadioGroupLinearLayout

したがって、RadioButtonアイテムを垂直に配置する必要があります。アイテムを横に並べるRadioGroup最も簡単な方法は、アイテムを横に並べ、固定の高さを使用して各「行」が一致するようにすることです。何かのようなもの:EditTextLinearLayout

LinearLayout root = new LinearLayout(this);
root.setOrientation(LinearLayout.HORIZONTAL);

RadioGroup buttonGroup = new RadioGroup(this);
buttonGroup.setOrientation(RadioGroup.VERTICAL);

LinearLayout editLayout = new LinearLayout(this);
editLayout.setOrientation(LinearLayout.VERTICAL);

//Add left/right pane to root layout
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT);
root.addView(buttonGroup, lp);

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT);
root.addView(editLayout, lp);

//Fixed height for each row item (45dp in this case)
//Getting DP values in Java code is really ugly, which is why we use XML for this stuff
int rowHeightDp = (int)TypedValue.applyDimension(COMPLEX_UNIT_DIP, 45.0f, getResources.getDisplayMetrics());

for(Map.Entry<String,String> entry : storedCards.entrySet())
{

    EditText ed = new EditText(this);
    RadioButton rb  = new RadioButton(this);
    rb.setId(counter++);
    rb.setText(entry.getKey());

    //Add each item with its LayoutParams
    LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        rowHeightDp) );
    buttonGroup.addView(rb, lp1);

    lp1 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        rowHeightDp) );
    editLayout.addView(ed, lp1);
}

これにより、アイテムの高さが固定されているため、2つの並んだレイアウトが並べられたままになります。LayoutParams各行に使用するアイテムの高さを調整できます。純粋なJavaでレイアウトを行うことが非常に冗長であることがわかります。これが、推奨される方法がXMLである理由です。

于 2013-02-05T04:00:00.863 に答える