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>
正如我在评论中所写,您需要避免丢失元素之间的绑定。例如,您可以替换创建新的
LayoutParams用于复印
Где метод
copyLp:Ну и во всех подобных места по аналогии.