5

コードで既存のxmlレイアウトにビューを追加できるようにしたいと思います。

        LinearLayout ll = (LinearLayout) findViewById(R.layout.common_list);

        TextView tv = new TextView(this);
        tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        tv.setText("sample text");
        ll.addView(tv);

        setContentView(ll); 

コードで新しいLinearLayoutを作成する場合は機能しますが、上記のコードのようにリソースを使用する場合は機能しません。

common_list.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="Quick List"/>

</LinearLayout>
4

1 に答える 1

7

LayoutInflaterを使用してみてください

LinearLayout ll = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.common_list)
TextView tv = new TextView(this);
tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tv.setText("sample text");
ll.addView(tv);

setContentView(ll);

これが機能しない場合は、Logcatからエラーを追加してください。

また、common_list.xmlのyout LinearLayoutでプロパティをandroid:layout_width = "fill_parent"からandroid:layout_width = "wrap_content"に変更し、common_list.xmlのTextViewにも同じことを行う必要があります。

なんで?レイアウトが水平方向であり、画面全体に表示されるためです。テキストエディットは、レイアウトと同じ量のスペースを埋めます(したがって、この場合は画面全体のスペースになります)。これで、別のテキストエディットを追加すると、最初のテキストエディットの右側に適切に追加されるため、画面外のようになります。何が起こるかを正確に理解するには:

-----------------
||-------------||---------------
||| TextViev1 ||||addedTextView|
||-------------||---------------
||             ||
||             ||
||             ||
||             ||
||             ||
||LinearLayout ||
||-------------||
|    screen     |
----------------

私も何度もこの問題を抱えていました。通常、ビューをレイアウトに追加しても表示されない(エラーが発生しない)場合、問題は幅/高さまたは位置にあります(たとえば、RelativeLayoutを使用する場合)。

于 2011-09-01T11:52:49.133 に答える