【问题标题】:getLocationInWindow not change after change LayoutParams更改 LayoutParams 后 getLocationInWindow 不会更改
【发布时间】:2019-12-03 12:34:17
【问题描述】:

我有这样的看法:

<View 
    android:layout_width="50dp"
    android:layout_height="50dp"/>

我两次获得全球位置。更改视图大小之前和更改视图大小之后。

代码:

private void getViewPosition(View view){
    int[] firstPosition = new int[2];
    int[] secondPosition = new int[2];
    RelativeLayoutParams lp = (RelativeLayoutParams)view.getLayoutParams();

    view.getLocationInWindow(firstPosition);

    lp.width = 150;
    lp.height = 150;
    view.setLayoutParams(lp);

    view.getLocationInWindow(secondPosition);
    Log.i("FirstLocation", firstPosition[0]);
    Log.i("SecondLocation", secondPosition[0];
}

当我看到日志时,位置是一样的。

怎么了?

【问题讨论】:

  • 我认为你必须将view.setLayoutParams(view);这一行改为view.setLayoutParams(lp);
  • 我编辑了,我的意思是 view.setLayoutParams(lp);

标签: android location layoutparams


【解决方案1】:

基本上,您无需等待 UI 更新和布局约束的实施。 尝试从Handler 发布它,您将获得预期的结果。

private void getViewPosition(final View view){
    final int[] firstPosition = new int[2];
    final int[] secondPosition = new int[2];
    ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams )view.getLayoutParams();

    view.getLocationInWindow(firstPosition);

    lp.width = 150;
    lp.height = 150;
    view.setLayoutParams(lp);

    new Handler().post(new Runnable() {
        @Override
        public void run() {
            view.getLocationInWindow(secondPosition);
            Log.i("FirstLocation", String.valueOf(firstPosition[0]));
            Log.i("SecondLocation", String.valueOf(secondPosition[0]));
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2015-05-31
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多