当前位置: 首页 > 面试题库 >

在运行时确定Android视图的大小

东方明亮
2023-03-14
问题内容

创建活动后,我试图将动画应用于Android应用程序中的视图。为此,我需要确定视图的当前大小,然后设置动画以从当前大小缩放到新大小。这部分必须在运行时完成,因为视图会根据用户的输入缩放为不同的大小。我的布局以XML定义。

这似乎是一项容易的任务,显然有很多关于此的SO问题,尽管没有一个解决了我的问题。所以也许我缺少明显的东西。我可以通过以下方式理解我的观点:

ImageView myView = (ImageView) getWindow().findViewById(R.id.MyViewID);

这工作得很好,但打电话时getWidth()getHeight()getMeasuredWidth()getLayoutParams().width,等,他们都返回0。我也试过手动调用measure()视图上,然后到一个呼叫getMeasuredWidth(),但没有效果。

我试过调用这些方法,并在活动的onCreate()和中检查调试器中的对象onPostCreate()。如何在运行时找出该视图的确切尺寸?


问题答案:

在视图上使用ViewTreeObserver等待第一个布局。只有在第一个布局之后,getWidth()/ getHeight()/ getMeasuredWidth()/ getMeasuredHeight()才能工作。

ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
  viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      viewWidth = view.getWidth();
      viewHeight = view.getHeight();
    }
  });
}


 类似资料:
  • 问题内容: 该示例非常简单:我想通过仅显示文本(canvas.drawText())来让用户知道应用程序在做什么。然后,出现我的第一条消息,而不是其他消息。我的意思是,我有一个“ setText”方法,但它不会更新。 该视图的文本绘制仅通过在onDraw();中执行一个drawText来起作用,因此setText更改了文本但不显示它。 有人建议我用SurfaceView替换视图,但是仅进行几次更新

  • 我正在寻找一种方法,在运行时改变JavaFX FXML应用程序的视图,并保存结果,以便在下次应用程序启动时显示。有办法吗?我在网上搜索,但没有找到任何解决方案!例如:我有一个函数,可以在GridPane中添加标签,并保存新添加的标签。在我的应用程序下一次启动时,新标签出现了。这是一个数据库应用程序,用户可以为自定义数据添加新的数据库字段。

  • 问题内容: 我正在尝试设置我的上传文件,这样,如果用户joe上传文件,它将转到MEDIA_ROOT / joe,而不是让每个人的文件都转到MEDIA_ROOT。问题是我不知道如何在模型中定义它。这是当前的外观: 所以我想要的不是“。” 作为upload_to,将其作为用户名。 我知道从Django 1.0开始,你可以定义自己的函数来处理upload_to,但是该函数不知道谁将成为谁,所以我有点迷路

  • 如果我使用某种硬编码条件,例如,我会得到Typescript错误消息: 当然,我可以在这里定义来禁用任何TypeScript检查,代码将编译并运行,但我的目标是能够仅通过签名来区分函数(而不依赖于其他约定,如名称或其他标志)。

  • 我正尝试在Windows10上运行react native。当我运行npm运行android时,我得到以下错误 正在启动JS服务器...正在设备上构建并安装应用程序(cd android&&gradlew.bat installDebug)... 失败:生成失败,出现异常。 在https://help.gradle.org获取更多帮助无法在设备上安装应用程序,请阅读上面的错误以了解详细信息。确保运

  • 问题内容: 我想知道是否可以在运行时设置注释变量? 问题答案: 不,那不可能。 注释以常量值的形式存储在类文件中,并且无法在运行时进行计算。 您能做的最好的事情就是存储有关如何计算值的某种“指令”。 例如,您可以使用某种脚本语言存储一个简单的表达式,然后在读取注释值时执行该表达式,或者可以指定要获取真实值的调用方法的名称。