web-dev-qa-db-ja.com

addViewを使用してビューをレイアウトに追加する方法

私はおそらくすべての投稿とドキュメントを読みましたが、まだこの問題を解決できません。

addView()メソッドを使用して既存の(実行中の)レイアウトにビューを追加したいのですが、何らかの理由でできません。これは簡単で基本的なことですが、それでもできません。だから、助けてください。

ここにコードがあります:

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
TextView text       = new TextView(this);
text.setText("test");
layout.addView(text);

これはコードであり、結果として、XMLファイルで定義されているビューのみが表示されています。追加したこの新しいビューはありません。デバッグすると、この追加されたビューが、追加した親の子として表示されますが、表示されません。

ここにmain.xmlがあります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
                Android:id="@+id/mainLayout"
              Android:layout_width="fill_parent" 
              Android:layout_height="fill_parent"
              Android:orientation="vertical"
              Android:background="@drawable/main1" >
    <TextView Android:id="@+id/app_title"
              Android:layout_width="fill_parent"
              Android:layout_height="wrap_content"
              Android:textColor="#FFF"
              Android:text="@string/app_title"
              Android:textSize="25dp" 
              Android:gravity="center_horizontal"/>
    <TextView Android:layout_width="fill_parent" 
              Android:layout_height="wrap_content"
              Android:layout_marginTop="5dp"
              Android:text="@string/main_screen_counter_title"
              Android:textSize="15dp" 
              Android:textColor="#FFF"
              Android:gravity="center_horizontal"/>
   <TextView Android:id="@+id/frontScreenCounter"
              Android:layout_width="fill_parent" 
              Android:layout_height="wrap_content"
              Android:textColor="#FFF"
              Android:text="@string/reading"
              Android:textSize="33dp"
              Android:gravity="center_horizontal" />   
    <GridView Android:id="@+id/gridview"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:columnWidth="90dp"
    Android:numColumns="3"
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp"
    Android:stretchMode="columnWidth"
    Android:gravity="center"
    Android:textColor="#888"
/>
</LinearLayout>

助けてください。これは私を狂わせるでしょう!

19
Majstor

新しく追加したビューにLayoutParametersを指定するのを忘れていました。

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
    TextView text=new TextView(this);
    text.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    text.setText("test");
    layout.addView(text);

[〜#〜]編集[〜#〜]

IDが@+id/gridviewGridViewは、レイアウトの高さがfill_parentで定義されているため、新しいビューを追加するスペースがありません。高さをwrap_contentに変更すると、問題が解決する場合があります。

他の人が簡単に解決策を検証できるように、この投稿にコメントを追加します。

17
Arun George

私は同じ問題を抱えていて、理由を見つけるのに何回か無駄にした。

私の欠点は、match_parentを高さとして設定したCustomViewを追加していたことです。

私はこの愚かな迷惑な間違いをした人に貴重な時間を節約したいと思っています:)

TextView tv = new TextView(this);
lytMarks.addView(tv);


CustomView cv = new CustomView(this, someObject);
lytMarks.addView(cv); // <-- This one had height = match_parent!!


EditText et = new EditText(this);
lytMarks.addView(et);
1
voghDev

あなたのlinearLayoutコンテンツは親のビューの上にあります。したがって、ScrollViewを使用する必要があります。このような:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">

<LinearLayout
    Android:id="@+id/mainLayout"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@drawable/main1"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/app_title"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center_horizontal"
        Android:text="@string/app_title"
        Android:textColor="#FFF"
        Android:textSize="25dp" />

    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="5dp"
        Android:gravity="center_horizontal"
        Android:text="@string/main_screen_counter_title"
        Android:textColor="#FFF"
        Android:textSize="15dp" />

    <TextView
        Android:id="@+id/frontScreenCounter"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center_horizontal"
        Android:text="@string/reading"
        Android:textColor="#FFF"
        Android:textSize="33dp" />

    <GridView
        Android:id="@+id/gridview"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:columnWidth="90dp"
        Android:gravity="center"
        Android:horizontalSpacing="10dp"
        Android:numColumns="3"
        Android:stretchMode="columnWidth"
        Android:textColor="#888"
        Android:verticalSpacing="10dp" />
</LinearLayout>
</ScrollView>
0
peter zhang