【问题标题】:android redraw layout programmaticallyandroid以编程方式重绘布局
【发布时间】:2012-07-06 01:31:45
【问题描述】:

我的布局有时无法正确定位元素。我尝试了很多解决方案,但独特的工作方式是从纵向旋转到横向,然后从横向返回到纵向。然后布局会自动重绘并完美契合。我设置了方向|键盘,所以内容不会重新加载,只会重绘。如何像风景肖像一样以编程方式重绘内容?谢谢。

编辑:我尝试了以下但没有效果

getWindow().getDecorView().findViewById(android.R.id.content).invalidate();
getWindow().getDecorView().findViewById(android.R.id.content).requestLayout();

Activity 在 onCreate setContentView(R.layout.main); 上设置了主布局

布局“main”包含一个 TabHost 和 Admob。 布局 "view" 包含一个 webview ("id:myWebview") 显示在 tab1 上。

并且还试图使它们无效! webview、布局主和布局视图和崩溃

【问题讨论】:

  • “有时”是什么意思?是否有任何可重现的方法来获取错误?您是否尝试过 requestLayout 强制重绘布局?你能放一些示例代码来显示你正在使用什么样的视图?
  • 您可以尝试调用invalidate() 来强制重绘视图。

标签: java android eclipse


【解决方案1】:

你试过invalidate()root view吗?

findViewById(android.R.id.content).invalidate();

这应该重绘整个布局。

【讨论】:

  • 这会导致setContentView() 被调用吗?
  • 在 kotlin 中,我通过 ID 直接调用了布局,即 llHint.invalidate(),但它不起作用我的意思是没有明确的包含 textview、edittext 等的整个布局。
【解决方案2】:

当屏幕方向改变时,Android 会重新创建当前的 Activity。

尝试致电measure(int, int) 或requestLayout()。否则就没有机会以编程方式重新布局视图。

【讨论】:

    【解决方案3】:

    请仅致电requestLayout() 并阅读View 类说明以了解更多信息。

    【讨论】:

      【解决方案4】:

      如果这是不安全或不好的做法,请纠正我。我也尝试了所有这些方法,出于绝望决定再次尝试调用我的 onCreate 并且它起作用了。所以现在我将在更新数据时使用onCreate(null) 来刷新我的视图。再次,请让我知道这是否不安全或不好的做法,如果可能的话,还有一个可行的替代方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多