【问题标题】:Add view to already existing xml viewgroup in code将视图添加到代码中已经存在的 xml 视图组
【发布时间】:2011-11-08 07:53:22
【问题描述】:

我希望能够在代码中向已经存在的 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 时它可以工作,但是当使用上面代码中的 Resource 时它就不行了。

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>

【问题讨论】:

  • 在 logcat 中出现了哪个错误?
  • ERROR/AndroidRuntime(8357):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.androidABC/com.example.androidABC.Common_ActivityList}:java.lang.NullPointerException 09-01 14:59:57.889: 错误/AndroidRuntime(8357): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2753) 09-01 14:59:57.889: 错误/AndroidRuntime(8357): 在 android.app.ActivityThread .handleLaunchActivity(ActivityThread.java:2769) 09-01 14:59:57.889: 错误/AndroidRuntime(8357): 在 android.app.ActivityThread.access$2500(ActivityThread.java:129)

标签: android xml layout view viewgroup


【解决方案1】:

尝试使用 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 中的 LinearLayout 中将属性从 android:layout_width="fill_parent" 更改为 android:layout_width="wrap_content" 并对 common_list.xml 中的 TextView 执行相同的操作

为什么?因为您的布局是横向的,它会填满整个屏幕空间。您的 TextEdit 填充的空间与您的布局一样多(因此在这种情况下,它是整个屏幕空间)。现在,当您添加另一个 TextView 时,它会正确添加 - 在您的第一个 TextEdit 的右侧,所以它就像在屏幕外。要准确了解会发生什么:

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

我也多次遇到这个问题。通常,如果您将 View 添加到布局并且您没有看到它(并且您没有收到错误)问题是宽度/高度或位置(例如,当您使用 RelativeLayout 时)。

【讨论】:

  • 现在它打开了 Activity 但它不显示创建的 TextView。这是我使用的代码:LinearLayout ll = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.common_list, null); 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);
  • 请附上您的 common_list.xml。
  • 我添加到问题描述中
  • 哇,谢谢。现在的问题是为什么?是因为 LayoutInflater 没有根 ViewGroup 吗?如果您可以编辑您的示例并为其添加解释以帮助其他人,那就太好了。我今天在这个问题上花了很多时间。再次感谢,你是我的英雄 :)
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多