22

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

メソッドを使用して既存の (実行中の) レイアウトにビューを追加したいのです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>

助けてください。これは私を夢中にさせます!

4

4 に答える 4

21

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);

編集

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

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

于 2012-07-09T15:26:15.857 に答える
1

私は同じ問題を抱えていて、理由を見つけるのに数時間を無駄にしました。

私の欠点は、高さとして設定された 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);
于 2016-12-12T11:56:49.843 に答える
1

思い出せませんが、レイアウトを再度読み込むための「更新」メソッドがあるかもしれません。

layout.invalidate(); を試してください。

于 2012-07-09T15:24:21.463 に答える