RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1103437
Accepted
Ruben Kubalyan
Ruben Kubalyan
Asked:2020-03-31 22:13:58 +0000 UTC2020-03-31 22:13:58 +0000 UTC 2020-03-31 22:13:58 +0000 UTC

为什么在更改相关布局中一组视图元素的宽度和高度时,所有这些视图都忘记了它们的位置?

  • 772

https://youtu.be/3p3x4TCwh14(这是以编程方式调整视图大小前后结果的视频截图)

下面是我更改 View 元素的宽度和高度的代码:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    //получаем размер экрана устройства/дисплея
    metrics = Resources.getSystem().getDisplayMetrics();
    displayWidth = metrics.widthPixels;
    displayHeight = metrics.heightPixels;

    widthMultiplier =  (double) displayWidth / (double) testedWidth;
    heightMultiplier = displayHeight/(double) testedHeight;

    Log.i("userTest2020",String.valueOf("display width = " + displayWidth+"\n"+"display height = "+displayHeight));

    if(hasFocus) {
        for (TextView textView:textViews) {
            viewWidth = textView.getWidth();
            viewHeight = textView.getHeight();

            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                    (int)(viewWidth*widthMultiplier),
                    (int)(viewHeight*heightMultiplier));

            // Setting the parameters on the TextView
            textView.setLayoutParams(lp);
            //break;
        }

        for (ImageView imageView: imageViews) {
            viewWidth = imageView.getWidth();
            viewHeight = imageView.getHeight();

            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                    (int)(viewWidth*widthMultiplier),
                    (int)(viewHeight*heightMultiplier));

            // Setting the parameters on the ImageView
            imageView.setLayoutParams(lp);
            //break;
        }

        /**/viewWidth = tv10.getWidth();
        viewHeight = tv10.getHeight();

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                (int)(viewWidth*widthMultiplier),
                (int)(viewHeight*heightMultiplier));

        // Setting the parameters on the ImageView
        tv10.setLayoutParams(lp);

        viewWidth = tv11.getWidth();
        viewHeight = tv11.getHeight();

        lp = new RelativeLayout.LayoutParams(
                (int)(viewWidth*widthMultiplier),
                (int)(viewHeight*heightMultiplier));

        // Setting the parameters on the ImageView
        tv11.setLayoutParams(lp);

        viewWidth = b1.getWidth();
        viewHeight = b1.getHeight();

        lp = new RelativeLayout.LayoutParams(
                (int)(viewWidth*widthMultiplier),
                (int)(viewHeight*heightMultiplier));

        // Setting the parameters on the ImageView
        b1.setLayoutParams(lp);

        viewWidth = b2.getWidth();
        viewHeight = b2.getHeight();

        FrameLayout.LayoutParams lp2 = new FrameLayout.LayoutParams(
                (int)(viewWidth*widthMultiplier),
                (int)(viewHeight*heightMultiplier));

        // Setting the parameters on the ImageView
        b2.setLayoutParams(lp2);

        viewWidth = b3.getWidth();
        viewHeight = b3.getHeight();

        lp2 = new FrameLayout.LayoutParams(
                (int)(viewWidth*widthMultiplier),
                (int)(viewHeight*heightMultiplier));

        // Setting the parameters on the ImageView
        b3.setLayoutParams(lp2);/**/
    }
}

有一种假设是,这是因为进行新的渲染意味着创建新的 UI,而 xml 中指定的所有内容都失去了相关性,所有内容都必须通过代码从头开始创建。但是,既然程序仍然通过在xml中设置的相应id来识别每个View,那么逻辑是不是被破坏了?

对应xml文件的内容

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/pokemon_background"
    tools:context=".MainActivity">

    <RelativeLayout
        android:id="@+id/relative_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">

        <TextView
            android:id="@+id/tv1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible"/>

        <TextView
            android:id="@+id/tv2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_toEndOf="@+id/tv1"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv3"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_toEndOf="@+id/tv2"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv4"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@+id/tv1"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv5"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@+id/tv2"
            android:layout_toEndOf="@+id/tv4"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv6"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@+id/tv3"
            android:layout_toEndOf="@+id/tv5"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv7"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@id/tv4"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv8"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@+id/tv5"
            android:layout_toEndOf="@+id/tv7"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv9"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@+id/tv6"
            android:layout_toEndOf="@+id/tv8"
            android:background="@drawable/search_icon_for_searchboard_cell"
            android:gravity="center"
            android:text="@string/click_me"
            android:textColor="@android:color/black"
            android:visibility="visible" />

        <ImageView
            android:id="@+id/iv1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_above="@+id/iv4"
            android:layout_toStartOf="@+id/iv5"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_above="@+id/iv5"
            android:layout_toEndOf="@id/iv4"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv3"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_above="@+id/iv5"
            android:layout_toEndOf="@+id/iv5"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv4"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@+id/iv5"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv5"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:alpha="1"
            android:background="@drawable/pika_pika"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv6"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@id/iv3"
            android:layout_toEndOf="@+id/iv5"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv7"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@id/iv4"
            android:layout_toStartOf="@+id/iv5"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv8"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@id/iv5"
            android:layout_toStartOf="@+id/iv6"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />

        <ImageView
            android:id="@+id/iv9"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@id/iv6"
            android:layout_toEndOf="@+id/iv5"
            android:alpha="0.4"
            android:background="@color/colorPrimary"
            android:visibility="invisible" />
    </RelativeLayout>

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:alpha="0.3"
            android:background="@android:color/white"
            android:gravity="center"
            android:text=" "
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv10"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:text=" "
            android:textColor="@android:color/black"
            android:visibility="visible" />


        <Button
            android:id="@+id/b1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerHorizontal="true"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:text="get resolution info"
            android:visibility="visible" />


        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true">

            <Button
                android:id="@+id/b2"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_marginStart="5dp"
                android:background="@android:color/transparent"
                android:gravity="center"
                android:text="new round"
                android:visibility="visible" />

            <ImageView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_marginStart="5dp"
                android:alpha="0.3"
                android:background="@color/colorGreen"
                android:gravity="center"
                android:text="new round"
                android:visibility="visible" />
        </FrameLayout>

        <FrameLayout
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_below="@id/relative_layout"
            android:layout_centerHorizontal="true">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:alpha="0.3"
                android:background="@color/colorRed"
                android:gravity="center"
                android:text="Try the bigger board"
                android:visibility="visible" />

            <Button
                android:id="@+id/b3"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="@android:color/transparent"
                android:gravity="center"
                android:text="Try the bigger board"
                android:textColor="@color/colorYellow"
                android:visibility="visible" />
        </FrameLayout>

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerHorizontal="true"
            android:alpha="0.3"
            android:background="@android:color/white"
            android:gravity="center"
            android:text="get resolution info"
            android:visibility="visible" />

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentEnd="true"
            android:layout_marginStart="5dp"
            android:alpha="0.3"
            android:background="@android:color/white"
            android:gravity="center"
            android:visibility="visible" />

        <TextView
            android:id="@+id/tv11"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentEnd="true"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:text="You're score is 0"
            android:textColor="@android:color/black"
            android:visibility="visible" />
</RelativeLayout>
android
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Alex_Skvortsov
    2020-03-31T22:41:28Z2020-03-31T22:41:28Z

    正如我在评论中所写,您需要避免丢失元素之间的绑定。例如,您可以替换创建新的LayoutParams

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                    (int)(viewWidth*widthMultiplier),
                    (int)(viewHeight*heightMultiplier));
    

    用于复印

    RelativeLayout.LayoutParams lp = copyLp(textView.getLayoutParams());
    

    Где метод copyLp:

    private RelativeLayout.LayoutParams copyLp(RelativeLayout.LayoutParams source){
        RelativeLayout.LayoutParams copy = new RelativeLayout.LayoutParams((RelativeLayout.LayoutParams)source);
        return copy;
    }
    

    Ну и во всех подобных места по аналогии.

    • 2

相关问题

  • 来自片段的列表落后于 BottomNavigationView

  • 无法将变量从 Activity 传递到 Fragment

  • 构建与完成的片段略有不同的片段的最佳方法是什么?

  • 如何更改来自服务器的响应中的日期格式?

  • 谷歌地图在应用程序的发布版本中不起作用

  • 材料设计按钮。单击按钮上的可选区域!

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5