如何在给定位置以编程方式将子视图添加到RelativeLayout?
例如,要反映以下图片:
my xml :( com.example.TransparentSlidingDrawer child是一个使用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"
/>
这是我的功能,这个功能不能正常工作:
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 :(得分:1)
您正在将文本视图与按钮顶部和左侧对齐:
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;
答案 1 :(得分:0)
布局中的每个视图都需要自己的LayoutParams
对象。重复使用同一个对象将无法按照您想要的方式工作。
此外,更喜欢使用UI小部件的活动上下文来正确应用您的应用主题。
答案 2 :(得分:0)
你也可以这样做
final TextView titleView = (TextView) itemLayout
.findViewById(R.id.titleView);
而不是创建所有这些附加参数,这将处理布局中的位置