2014-01-26 176 views
1

如何在給定位置以編程方式將Child View添加到RelativeLayout?以編程方式將視圖添加到RelativeLayout android

例如,以反映如下圖:

enter image description here

我的xml:(com.example.TransparentSlidingDrawer孩子是一個簡單的類,它使用的LinearLayout擴展)

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:orientation="horizontal" > 
<ScrollView 
     android:layout_width="wrap_content" 
     android:layout_height="100dp" 
     > 
<com.example.TransparentSlidingDrawer 
    android:id="@+id/popup" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    > 
    <RelativeLayout 
     android:id="@+id/relativelayout_imageview_textviews_slider" 
     android:layout_width="wrap_content" 
     android:layout_height="100dp" 
     >  
    </RelativeLayout> 


</com.example.TransparentSlidingDrawer> 

</ScrollView> 
<ImageButton 
    android:id="@+id/open_close_slider" 
    android:layout_width="25dp" 
    android:layout_height="25dp" 
    /> 


這是我的功能th在這個功能不能很好地工作:

private void addChild(){ 
    RelativeLayout relativelayout = (RelativeLayout)findViewById(R.id.relativelayout_imageview_textviews_slider); 

    RelativeLayout.LayoutParams imageparams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

    imageparams.setMargins(0, 5, 0, 0); 

    RelativeLayout.LayoutParams textparams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

    textparams.setMargins(0, 25, 5, 0); 

    imageparams.addRule(RelativeLayout.ALIGN_PARENT_TOP,RelativeLayout.TRUE); 
    imageparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,RelativeLayout.TRUE); 

    for(int i = 0 ; i < 9 ; ++i){ 
     ImageButton btn = new ImageButton(getApplicationContext()); 
     btn.setId(i+1); 
     btn.setBackgroundResource(R.drawable.ic_launcher); 
     TextView txt = new TextView(getApplicationContext()); 
     txt.setText("text"+i); 
     txt.setId(i+1); 
     textparams.addRule(RelativeLayout.ALIGN_TOP, btn.getId()); 
     textparams.addRule(RelativeLayout.LEFT_OF, btn.getId()); 
     relativelayout.addView(btn, imageparams); 
     relativelayout.addView(txt, textparams); 
    } 

} 
+0

什麼是RelativeLayout的自定義的LinearLayout裏面呢? – pskink

+0

以編程方式添加textviews和imageviews。 – user3103823

回答

1

你正在調整與按鍵頂部的textviews和左派在這裏:

textparams.addRule(RelativeLayout.ALIGN_TOP, btn.getId()); 
    textparams.addRule(RelativeLayout.LEFT_OF, btn.getId()); 

您需要爲ImageButtons做同樣的 - 除了對準第一個與父,那麼每個後續的一個,你需要對齊頂到了前面的ImageButton(這裏是假的代碼):

btn.addRule(RelativeLayout.ALIGN_BOTTOM, btnAbove.getId()); 

然後保持在「btnAbove」前面的按鈕的引用在你的循環一樣的結尾:

btnAbove = btn;

+0

好吧,現在,我的問題在哪裏? http://paste.ubuntu.com/6824994/ http://i.stack.imgur.com/g8Ckw.jpg – user3103823

+0

你正在告訴textviews填充父..他們應該可能WRAP_CONTENT不是你的代碼在這裏 - > RelativeLayout .LayoutParams textparams = new RelativeLayout.LayoutParams(\t \t \t \t RelativeLayout.LayoutParams.FILL_PARENT(problem),RelativeLayout.LayoutParams.FILL_PARENT(problem)); – Jim

+0

我將其更改爲warp_content,但之前出現同樣的問題(http://i.stack.imgur.com/g8Ckw.jpg) – user3103823

0

在佈局每個視圖都需要自己的LayoutParams對象。重複使用相同的對象不會按照您想要的方式工作。

此外,更喜歡使用UI小部件的活動上下文來正確應用您的應用程序主題。

0

你也可以做到這一點

final TextView titleView = (TextView) itemLayout 
      .findViewById(R.id.titleView); 

而不是創建所有這些額外的參數,這將照顧位置的佈局

相關問題