2010-11-24 20 views
4

私はまだAndroidを学んでいるので(私はHello、Androidの本を手に入れるまで2ヶ月かかるとAmazonによると思われます)私はまだ簡単なことをやって遊んでいます。 ImageViewを使用して、RelativeLayoutのボタンをクリックして表示するアイコンを取得するのに問題はありません。作成するためのコードは、それは次のとおりです。RelativeLayoutにコンテンツを動的に追加

private int mIconIdCounter = 1; 
private ImageView addIcon(){ 
    ImageView item = new ImageView(this); 
    item.setImageResource(R.drawable.tiles); 
    item.setAdjustViewBounds(true); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    if(mIconIdCounter != 1){ 
     params.addRule(RelativeLayout.RIGHT_OF, 1); 
    } 
    item.setLayoutParams(params); 
    item.setId(mIconIdCounter); 
    ++m_IconIdCounter; 
    return item; 
} 

やアイテムを追加するコードは次のとおりです。

Button addButton = (Button)findViewById(R.id.add_new); 
addButton.setOnClickListener(new OnClickListener(){ 
    @Override 
    public void onClick(View view) { 
     addContentView(addIcon(), new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } 
}); 

私は何が起こるか私のボタンをクリック

は、新しく作成されたすべてのビューが互いの上に配置されています。私はそれらを次の要素の右に置くことを望みます。私はRelativeLayoutに関する記事をSOですばやく検索し、同様のもの( hereherehere、および here)を見つけましたが、これらは相対的なビューにコンテンツを取り込む際に、ポジショニングの側面に対処していないようです。

私は間違っていますか?

EDIT:あなたの代わりにRelativeLayoutのレイアウトXMLのルートにビューを追加するかもしれないように見えます

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button 
     android:id="@+id/add_new" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/add_new" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 

答えて

8

私の主なXMLのように見えます。

あなたは試みることができる:

RelativeLayout layout = (RelativeLayout)findViewById(R.id.my_layout); 
layout.addView(addIcon()); 
+0

私の主なXMLがRelativeLayoutとその中のボタンに過ぎない場合、どうすればそれにアクセスできますか?ちょうど(R.id.main)のように?私はあなたにあなたの質問を更新します。 – wheaties

+0

あなたはあなたのrelativelayoutにandroid:id = "+ @ id/my_layout"というIDを与える必要があります。 次に、コード内にレイアウトをインスタンス化できます。ビューを追加することができます。 お役に立てば幸いです! – Knossos

+0

問題ありません。お役に立てて嬉しいです。 – Knossos

0

を使用すると、関数呼び出し内に新しい相対的なレイアウトを作成しています。新しい相対レイアウトが作成され、クリックするとビューに追加されるたびに、共通の相対レイアウトを使用します。

+1

新しいレイアウトではなく、毎回新しいレイアウトパラメータを作成しています。それは問題のaddContentViewです。 – techiServices

関連する問題