【问题标题】:Android: Using my own customized layout to fill a scrollviewAndroid:使用我自己的自定义布局来填充滚动视图
【发布时间】:2011-09-01 10:27:38
【问题描述】:

我一直在从头开始学习和构建一个 Android 应用程序,但我碰壁了。 我在 android 开发者页面上阅读了有关可自定义 UI 组件的信息,并认为我可以使用这些组件在我的应用程序中包含聊天页面的消息。

我已经制作了 XML 文件,但我不知道如何从我的代码中调用这些布局文件。 目前我从一个数组中读取我的消息,然后通过一个循环创建一个 TextView 并通过代码为其设置必要的属性,然后将它添加到一个 scrollView 中的 RelativeLayout。这一切都很好,但我希望我的消息显示更多信息(例如时间以及收件人是否已收到/阅读它),这是新的 XML 文件进来的地方,它们已经设置了字段和布局,所以我想我可以调用这些,设置一些变量并完成它。

正如我之前所说,问题是我不知道如何在我的代码中引用布局文件。我已经阅读了 android 开发者页面上关于构建自己的 UI 元素的所有文章,并且我也在谷歌上搜索了我的公平份额,但显然我是唯一一个想到这样做的人,或者我可以'找不到合适的关键字。所以现在我问你们。提前感谢你们能给我的任何答案。

编辑: 我一直在做一些研究,我认为我需要做的是编写自己的适配器来处理我自己的消息类和我自己的这些消息的 XML 布局。但是我不知道从哪里开始,因为我找不到任何关于如何编写自己的适配器的好文档。

【问题讨论】:

  • 我需要澄清一下。我认为以下基本上是您想要做的:在您的 ScrollView 中将 newMessage 添加到 relativeLayout,然后在 newMessage 下面添加 timeAndDateLayout.xml,然后能够在 timeAndDateLayout.xml 下面添加 newMessage2,然后再次添加 timeAndDateLayout.xml(with不同的值)低于 newMessage2 这基本上是你想要的吗?
  • 有点,是的。我创建了一个 XML 文件,其中包含 2 个 TextView,一个用于时间/日期,一个用于消息。当我收到一条新消息(或加载它们时)时,我希望能够使用 XML 文件将它们添加到我的滚动视图中。
  • 您可以将您的解决方案作为答案发布,然后接受它,因为我的答案确实不是解决方案,它会让需要信息的人更容易注意到。也就是说,如果你足够关心打扰。

标签: android xml android-layout custom-component


【解决方案1】:

您可以执行以下操作,但这将创建一个新的 TextView 忽略您拥有的任何布局:

ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView);
TextView textView = new TextView(this);
textView.setText(message);
scrollView.addView(textView);
textView.setText(timeAndDate);
scrollView.addView(textView);

我从未亲自使用过 ScrollView,因此我不能 100% 确定上述功能,但它符合我使用 LinearLayout 和 RelativeLayout 的经验。

或者,既然您已经有了自定义布局,您可以这样做:

ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView);
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(messageTimeDate);
scrollView.addView(textView);

这基本上就是你可以处理它的方式。我不能 100% 确定您是否可以在任一实现中多次添加 textView。如果抛出异常,您可以使用文本视图的数组列表,例如:

ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView);
ArrayList<TextView> textView = new ArrayList<TextView>();
textView.add((TextView)findViewById(R.id.textView));
textView.get(index).setText(messageTimeDate);
scrollView.addView(textView.get(index).getId());

无论我将 textView 放在哪里作为 id,您都可以使用 message 或 timeDate,然后将我引用的每个内容制作两个。

【讨论】:

  • 感谢您的回复,但这并不是我真正想要的。不过,我找到了另一种方法,我现在使用适配器并为其分配 ViewBinder 以指定哪些数据进入哪些字段。不过感谢您的帮助。
  • 没问题。我从未使用过 ViewBind 或 Adapter,但我确信这将是一种更简单的方法。很高兴您找到了解决方案。
  • 对于那些对我是如何做到的感兴趣的人(如果你自己也遇到同样的问题):对于我想用自己的随机数据集创建的每个列表,我创建了自己的适配器扩展 BaseAdapter。通过简单地覆盖 getView 方法,可以膨胀和填充列表项的不同部分。我使用this 教程来帮助我创建自己的适配器
【解决方案2】:

对于那些对我的做法感兴趣的人(如果您自己也遇到同样的问题):
对于我想用我自己的随机数据集创建的每个列表,我创建了我自己的扩展 BaseAdapter 的适配器。通过简单地覆盖 getView 方法,可以膨胀和填充列表项的不同部分。
我使用 this 教程来帮助我创建自己的适配器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多