5

相対レイアウトにイメージビューを追加するのに問題があります。RelativeLayout を使用して動的に作成しているメニュー項目のリストに画像を追加したいと考えています。すべてのメニュー項目は正常に表示されますが、各項目に画像を追加しようとすると、矢印が 1 つしか表示されず、垂直方向の中央に配置されません。以下は私のコードです。

私のXMLファイルで

<RelativeLayout 
            android:id="@+id/pMenu"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </RelativeLayout>

私のコードでは:

private void buildMenu(String name, int id) {

    String[] menuItems = getResources().getStringArray(pMenus[id]);
    // Get the rel layout from xml
    RelativeLayout container = (RelativeLayout) findViewById(R.id.pMenu);

    int imageId=1;
    Typeface tf = Typeface.createFromAsset(this.getAssets(),"mreavesmodot-reg.otf");
    for(String menuItem: menuItems) {           

        // Defining the layout parameters
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);


        StyledButton menuImage = new StyledButton(this);
        menuImage.setBackgroundResource(R.drawable.menu_button);
        menuImage.setText(menuItem);
        menuImage.setTypeface(tf);
        menuImage.setTextSize(19);
        menuImage.setPadding(20, 0, 0, 0);
        menuImage.setTextColor(Color.WHITE);
        menuImage.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
        menuImage.setOnClickListener(getOnClickListener(menuImage, name));
        menuImage.setId(imageId);

        if(imageId==1) {
            lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        } else {
            lp.addRule(RelativeLayout.BELOW ,imageId-1);
        }
        menuImage.setLayoutParams(lp);


        ImageView arrow = new ImageView(this);
        arrow.setImageResource(R.drawable.arrow_menu);
        arrow.setPadding(0, 0, 15, 0);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, 
                RelativeLayout.LayoutParams.WRAP_CONTENT );
        params.addRule(RelativeLayout.ALIGN_RIGHT,menuImage.getId());
        params.addRule(RelativeLayout.CENTER_VERTICAL);

        arrow.setLayoutParams(params);

        container.addView(menuImage);
        container.addView(arrow);

        imageId++;
    }
}
4

1 に答える 1

4

以下の行があなたの問題だと思います

params.addRule(RelativeLayout.CENTER_VERTICAL); 

はい、複数の矢印を追加している可能性が最も高く、完全な相対レイアウトの垂直方向の中央にすべて整列されているだけです。そのコマンドは、ボタン項目に対して垂直方向のセンタリングを実行していませんが、親の RelativeLayout に対して実行しています。

于 2012-06-11T15:11:03.443 に答える