【问题标题】:Changing View properties after onCreate()在 onCreate() 之后更改视图属性
【发布时间】:2010-08-04 07:17:00
【问题描述】:

第一次发帖,Android 新手,我似乎在这个问题上遇到了障碍:

我正在创建一个动态布局,由几个相同的“复合”对象组成(这些基本上是“浮动”线性布局,每个都包含一个图标(ImageView)和一个标题(TextView))。每个 LinearLayout 的 (x,y) 坐标可能会根据用户操作发生变化,并且需要精确放置(即:不能使用 RelativeLayout 等),因此我将它们定位在 AbsoluteLayout 内。

在 onCreate() 期间,我将这些对象中的每一个添加为 AbsoluteLayout 对象内的子视图,然后手动设置 (x,y)。到目前为止没有问题,效果很好,初始布局很完美。

问题:

在最初的 onCreate() 之后,我无法让这些对象的 (x,y) 位置在屏幕上发生变化。我可以更新他们的 layoutParams,但屏幕上的布局(在 AbsoluteLayout 内)永远不会刷新。我试过 forceLayout()、invalidate()、requestLayout(),都不管用。

我的基本方法有问题吗,还是我遗漏了什么?

我正在考虑更改为 SurfaceView 并仅以艰难的方式进行渲染,但我的代码现在可以运行 99%,如果我不需要,我不想更改它。唯一的问题是布局管理器只是拒绝为我的子对象注册位置更改。

求助,我做错了什么?

【问题讨论】:

    标签: android layout dynamic oncreate absolutelayout


    【解决方案1】:

    您是否尝试为 UI 创建一个处理程序,然后从中更新您的 UI..

    UI 将无法从不同的线程更新。因此,为 UI 创建一个线程处理程序并使用该处理程序更新对 UI 的更改。

    -维奈

    【讨论】:

    • 我在这里很困惑,因为我认为 UI 位于主线程中(与调用 onCreate() 相同的线程)。不是这样吗?我还没有在我的应用程序中创建任何其他线程。
    • 你说得对,UI 是主线程的一部分。它将一直运行,直到应用程序被杀死。但是,当您尝试从其他位置更新 UI 时,您可能无法访问。通常,我注意到当我等待一些事件时它会失败。
    • 更新:我把所有东西都移到了一个自定义的 SurfaceView 对象中,它工作得更好了。以下教程对我来说是一个很好的起点:droidnova.com/playing-with-graphics-in-android-part-i,147.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2021-03-08
    • 2021-06-28
    • 2017-09-07
    • 2012-05-28
    相关资源
    最近更新 更多