如何使用 addView 将视图添加到布局?
Posted
技术标签:
【中文标题】如何使用 addView 将视图添加到布局?【英文标题】:How to use addView to add view to layout? 【发布时间】:2012-07-09 00:45:33 【问题描述】:我可能已经阅读了所有帖子和文档,但我仍然无法解决这个问题。
我想使用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_
android:layout_
android:orientation="vertical"
android:background="@drawable/main1" >
<TextView android:id="@+id/app_title"
android:layout_
android:layout_
android:textColor="#FFF"
android:text="@string/app_title"
android:textSize="25dp"
android:gravity="center_horizontal"/>
<TextView android:layout_
android:layout_
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_
android:layout_
android:textColor="#FFF"
android:text="@string/reading"
android:textSize="33dp"
android:gravity="center_horizontal" />
<GridView android:id="@+id/gridview"
android:layout_
android:layout_
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:textColor="#888"
/>
</LinearLayout>
请帮忙。这会让我发疯!
【问题讨论】:
您可以在要添加TextView
的位置添加布局吗?
嘿 Luksprog,这是因为 LinearLayout 属性中的 android:layout_。我现在已经显示了文本,但是在屏幕的底部。如何把它放在顶部?你帮助了我。间接的,但仍然。 Tnx 很多。
如果你想将 TextView
放在某个位置,你应该使用另一种风格的 addView
方法,它需要一个 int,即放置新 View
的位置,类似于这个:addView(text, 0);
完成!而已! Tnx 再多一次。速度很棒。保重。
【参考方案1】:
您忘记为新添加的视图指定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/gridview
的GridView
定义为布局高度fill_parent
,让您没有空间添加新视图。将其高度更改为wrap_content
可能会解决您的问题。
将我的评论添加到此帖子以帮助其他人轻松验证解决方案。
【讨论】:
我应该分配哪些参数?我尝试添加边距、宽度、高度,但仍然没有.. 你能发布你的 mainlayout.xml 吗?因为 Arun 的代码也适合我 我尝试了您的代码,但仍然没有。它作为那个父母的孩子在那里,但没有显示出来。有更多想法? Tnx 为您的努力而努力。 使用您提供的代码,这是我能想到的唯一解决方案。也许如果您发布更多代码,可以识别错误。 id 为@+id/gridview
的GridView
定义为布局高度fill_parent
,让您没有空间添加新视图。将其高度更改为 wrap_content
可能会解决您的问题。【参考方案2】:
我不记得了,但也许有任何“刷新”方法可以再次加载布局。
试试 layout.invalidate();
【讨论】:
试过了,还是不行。有更多想法? @MajstorInvalidate();
必须在顶层布局上调用,你是从那个对象调用它的吗?【参考方案3】:
我遇到了同样的问题,浪费了好几次寻找原因。
我的错是我添加了一个将 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);
【讨论】:
【参考方案4】:您的 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_
android:layout_>
<LinearLayout
android:id="@+id/mainLayout"
android:layout_
android:layout_
android:background="@drawable/main1"
android:orientation="vertical">
<TextView
android:id="@+id/app_title"
android:layout_
android:layout_
android:gravity="center_horizontal"
android:text="@string/app_title"
android:textColor="#FFF"
android:textSize="25dp" />
<TextView
android:layout_
android:layout_
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_
android:layout_
android:gravity="center_horizontal"
android:text="@string/reading"
android:textColor="#FFF"
android:textSize="33dp" />
<GridView
android:id="@+id/gridview"
android:layout_
android:layout_
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:stretchMode="columnWidth"
android:textColor="#888"
android:verticalSpacing="10dp" />
</LinearLayout>
</ScrollView>
【讨论】:
以上是关于如何使用 addView 将视图添加到布局?的主要内容,如果未能解决你的问题,请参考以下文章