当以编程方式添加到动态生成的relativelayout时,一个视图在另一个视图上

时间:2013-05-03 12:21:39

标签: android view relativelayout overlap

mDocView与cramperView重叠,就像它在另一个上面一样。我想在topHeader下面使用mDocView。

我的cramper.xml -

<ViewSwitcher
    android:id="@+id/switcher"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" >

    <Button
        android:id="@+id/backfromreport"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:background="@drawable/btn_black_xml"
        android:padding="10dp"
        android:text="Back"
        android:clickable="true"
        android:onClick="goBack"

        android:textColor="#ffffff"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/messager"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Messager"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textStyle="bold" />

</LinearLayout>
</ViewSwitcher>

相关的Cramper Java文件:

private View cramperView;
private LinearLayout   topHeader;

@Override
public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);
topHeader = (LinearLayout) findViewById(R.id.linearLayout1);
private ReaderView   mDocView = new ReaderView(this); //ReaderView extends AdapterView
cramperView= getLayoutInflater().inflate(R.layout.cramper,null);
RelativeLayout layout = new RelativeLayout(this);
layout.addView(cramperView);
layout.addView(mDocView);
setContentView(layout);

2 个答案:

答案 0 :(得分:0)

为视图添加布局参数

RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.FILL_PARENT,
            RelativeLayout.LayoutParams.FILL_PARENT);
rlp.addRule(RelativeLayout.BELOW, R.id.linearLayout1); 
mDocView.setLayoutParams(rlp);

layout.addView(cramperView);
layout.addView(mDocView);
setContentView(layout);

答案 1 :(得分:0)

正如您所说ViewSwicher位于RelativeLayout内,并且您在layout.addView(mDocView)之后使用layout.addView(cramperView),因此它将始终添加ReaderView(扩展AdapterView)在 cramper 布局之后。

解决方案是:

在{x}文件中RelativeLayout之后添加</ViewSwitcher>。像这样:

    <RelativeLayout
        android:id="@+id/docViewLayout"
        android:layout_width="1190dp"
        android:layout_height="1284dp"
        android:layout_below="@+id/switcher"
        android:layout_centerHorizontal="true" >
    </RelativeLayout>

在此RelativeLayout中,您可以调整宽度和高度,使其适合您的布局。

下一步是在ReaderView中添加RelativeLayout,当您动态生成时,应将其添加到onCreate()

     RelativeLayout layout = new RelativeLayout(this);

     RelativeLayout docViewLayout = (RelativeLayout) mButtonsView.findViewById(R.id.docViewLayout);
     docViewLayout.addView(mDocView);

     layout.addView(cramperView);

     setContentView(layout);

希望这有帮助。