addView不起作用

时间:2012-07-09 15:21:28

标签: android layout view viewgroup adview

我可能已阅读所有帖子和文档,但我仍无法解决此问题。

我想使用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 个答案:

答案 0 :(得分:17)

您忘了为新添加的视图指定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为GridView的{​​{1}}的布局高度为@+id/gridview,您无法添加新视图。将其高度更改为fill_parent可能会解决您的问题。

在此帖子中添加我的评论,以帮助其他人轻松验证解决方案。

答案 1 :(得分:1)

我有同样的问题,浪费了几次找到原因。

我的错是我添加了一个将match_parent设置为height的CustomView。

我希望能给那些做出这个愚蠢的烦人错误的人节省一些宝贵的时间:)

@NgModule({
  imports: [
    RouterModule,
    ...
    ]

答案 2 :(得分:0)

Your linearLayout content is over the parent's View. so you need to use ScrollView. like this:

<?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>

答案 3 :(得分:-1)

我不记得了,但也许有任何“刷新”方法再次加载布局。

尝试layout.invalidate();