Почему при изменении width и height группы View элементов в RelatedLayout все эти View забывают свои местоположения?
https://youtu.be/3p3x4TCwh14 (это скрин видео результата до и после изменении размеров View программным путем)
Вот ниже код с помощью которого я веду изменение width и height 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 теряет свою актуальность и все надо создавать с нуля через код. Но тогда, не нарушается ли логика, учитывая что программа все равно распознает каждый View через соответствующие id, которые были заданы в xml?
содержание соответствующего 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>
Ответы (1 шт):
Как я писал в комментариях, Вам необходимо избежать потери привязок элементов друг к другу. Можно, например, заменить создание новых 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;
}
Ну и во всех подобных места по аналогии.