Вес макета используется для другого экрана - PullRequest
0 голосов
/ 15 мая 2018

У меня есть два счетчика и квадратное изображение.Я установил вес для исправления макета, чтобы на каждом экране соотношение было одинаковым на всех экранах, таких как маленький, нормальный, большой и большой.Я отказался от малого.Изображение дано ниже: введите описание изображения здесь

Я использовал вес макета во время выполнения следующим образом:

private void initfixview()
{
    LinearLayout.LayoutParams lnrspnrviewlayoutparams= (LinearLayout.LayoutParams)lnrspnrview.getLayoutParams();
    LinearLayout.LayoutParams lnrimageviewlayoutparams= (LinearLayout.LayoutParams)lnrimageview.getLayoutParams();

    LinearLayout.LayoutParams lnrdummyspacelayoutparams= (LinearLayout.LayoutParams)lnrdummyspace.getLayoutParams();
    LinearLayout.LayoutParams lnrimgarrowupdownlayoutparams= (LinearLayout.LayoutParams)lnrimgarrowupdown.getLayoutParams();

    LinearLayout.LayoutParams lnrcountrystatelayoutparams= (LinearLayout.LayoutParams)lnrcountrystate.getLayoutParams();
    LinearLayout.LayoutParams lnrzipcodelayoutparams= (LinearLayout.LayoutParams)lnrzipcode.getLayoutParams();


    if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE)
    {
        lnrspnrviewlayoutparams.weight=80;
        lnrspnrviewlayoutparams.width=80;


        lnrimageviewlayoutparams.weight=20;
        lnrimageviewlayoutparams.width=20;


        lnrspnrview.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimageview.setLayoutParams(lnrimageviewlayoutparams);

        lnrdummyspacelayoutparams.weight=80;
        lnrdummyspacelayoutparams.width=80;


        lnrimgarrowupdownlayoutparams.weight=20;
        lnrimgarrowupdownlayoutparams.width=20;


        lnrdummyspace.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimgarrowupdown.setLayoutParams(lnrimageviewlayoutparams);

        lnrcountrystatelayoutparams.weight=80;
        lnrcountrystatelayoutparams.width=80;


        lnrzipcodelayoutparams.weight=20;
        lnrzipcodelayoutparams.width=20;


        lnrcountrystate.setLayoutParams(lnrspnrviewlayoutparams);
        lnrzipcode.setLayoutParams(lnrimageviewlayoutparams);
    }
    else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL)
    {
        lnrspnrviewlayoutparams.weight=70;
        lnrspnrviewlayoutparams.width=70;


        lnrimageviewlayoutparams.weight=30;
        lnrimageviewlayoutparams.width=30;


        lnrspnrview.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimageview.setLayoutParams(lnrimageviewlayoutparams);

        lnrdummyspacelayoutparams.weight=70;
        lnrdummyspacelayoutparams.width=70;


        lnrimgarrowupdownlayoutparams.weight=30;
        lnrimgarrowupdownlayoutparams.width=30;


        lnrdummyspace.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimgarrowupdown.setLayoutParams(lnrimageviewlayoutparams);


        lnrcountrystatelayoutparams.weight=70;
        lnrcountrystatelayoutparams.width=70;


        lnrzipcodelayoutparams.weight=30;
        lnrzipcodelayoutparams.width=30;


        lnrcountrystate.setLayoutParams(lnrspnrviewlayoutparams);
        lnrzipcode.setLayoutParams(lnrimageviewlayoutparams);
    }

    else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE)
    {
        lnrspnrviewlayoutparams.weight=85;
        lnrspnrviewlayoutparams.width=85;


        lnrimageviewlayoutparams.weight=15;
        lnrimageviewlayoutparams.width=15;


        lnrspnrview.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimageview.setLayoutParams(lnrimageviewlayoutparams);

        lnrdummyspacelayoutparams.weight=85;
        lnrdummyspacelayoutparams.width=85;


        lnrimgarrowupdownlayoutparams.weight=15;
        lnrimgarrowupdownlayoutparams.width=15;


        lnrdummyspace.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimgarrowupdown.setLayoutParams(lnrimageviewlayoutparams);

        lnrcountrystatelayoutparams.weight=85;
        lnrcountrystatelayoutparams.width=85;


        lnrzipcodelayoutparams.weight=15;
        lnrzipcodelayoutparams.width=15;


        lnrcountrystate.setLayoutParams(lnrspnrviewlayoutparams);
        lnrzipcode.setLayoutParams(lnrimageviewlayoutparams);
    }

    else
    {
        lnrspnrviewlayoutparams.weight=70;
        lnrspnrviewlayoutparams.width=70;


        lnrimageviewlayoutparams.weight=30;
        lnrimageviewlayoutparams.width=30;


        lnrspnrview.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimageview.setLayoutParams(lnrimageviewlayoutparams);

        lnrdummyspacelayoutparams.weight=70;
        lnrdummyspacelayoutparams.width=70;


        lnrimgarrowupdownlayoutparams.weight=30;
        lnrimgarrowupdownlayoutparams.width=30;


        lnrdummyspace.setLayoutParams(lnrspnrviewlayoutparams);
        lnrimgarrowupdown.setLayoutParams(lnrimageviewlayoutparams);

        lnrcountrystatelayoutparams.weight=70;
        lnrcountrystatelayoutparams.width=70;


        lnrzipcodelayoutparams.weight=30;
        lnrzipcodelayoutparams.width=30;


        lnrcountrystate.setLayoutParams(lnrspnrviewlayoutparams);
        lnrzipcode.setLayoutParams(lnrimageviewlayoutparams);
    }

    edtcompanyname.setHint(Html.fromHtml(getString(R.string.namecompany)));
    edtusertelephone.setHint(Html.fromHtml(getString(R.string.telephone)));
}

Теперь в устройствах все работает нормально, нов некоторых устройствах соотношение не поддерживается, как в обычных устройствах небольшого размера.

Я испробовал все возможные решения, такие как наименьшая ширина, коэффициент плотности и создание нескольких макетов для одного и того же:

Полученное изображениениже:

введите описание изображения здесь

Код для моего макета приведен ниже:

<LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_marginEnd="@dimen/pleaseselectonemarginstart"
                android:layout_marginLeft="@dimen/pleaseselectonemarginstart"
                android:layout_marginRight="@dimen/pleaseselectonemarginstart"
                android:layout_marginStart="@dimen/pleaseselectonemarginstart"
                android:layout_marginTop="10dp"
                android:clickable="true"
                android:gravity="center"
                android:orientation="horizontal"
                android:weightSum="100">

                <LinearLayout
                    android:id="@+id/lnrspnrview"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="70"
                    android:orientation="vertical"
                    android:layout_gravity="center"
                    android:gravity="center">

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="50dp"
                        android:layout_gravity="center"
                        android:background="@drawable/shadow_white_normal"
                        android:clickable="true"
                        android:gravity="center"
                        android:orientation="horizontal">
                        <Spinner
                            android:id="@+id/spnrcountry"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:fontFamily="@font/sfdmedium"
                            android:gravity="center|left"
                            android:hint="@string/telephone"
                            android:paddingLeft="10dp"
                            android:paddingStart="10dp"
                            android:textColor="@color/edtcolor"
                            android:textColorHint="@color/hintcolor"
                            android:textSize="@dimen/textsize" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="50dp"
                        android:layout_gravity="center"
                        android:layout_marginTop="10dp"
                        android:background="@drawable/shadow_white_normal"
                        android:clickable="true"
                        android:gravity="center"
                        android:orientation="horizontal">

                        <Spinner
                            android:id="@+id/spnrbusinesscategory"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:fontFamily="@font/sfdmedium"
                            android:gravity="center|left"
                            android:hint="@string/telephone"
                            android:paddingLeft="10dp"
                            android:paddingStart="10dp"
                            android:textColor="@color/edtcolor"
                            android:textColorHint="@color/hintcolor"
                            android:textSize="@dimen/textsize" />
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/lnrimageview"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginLeft="10dp"
                    android:layout_marginStart="10dp"
                    android:layout_weight="30"
                    android:clickable="true"
                    android:gravity="center"
                    android:orientation="horizontal">

                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                        <custom.SquareImageView
                            android:id="@+id/edtuploadimage"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_centerVertical="true"
                            android:gravity="center"
                            android:scaleType="fitXY"
                            android:src="@drawable/shadow_logo" />

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_alignParentLeft="true"
                            android:layout_alignParentStart="true"
                            android:layout_alignParentTop="true"
                            android:clickable="true"
                            android:fontFamily="@font/sfdmedium"
                            android:gravity="center"
                            android:text="@string/uploadlogo"
                            android:textColor="@color/hintcolor"
                            android:textSize="@dimen/lessertextsize" />
                    </RelativeLayout>
                </LinearLayout>
            </LinearLayout>

Я буду очень рад здесь любомувозможное решение.Как у меня есть все решения этой проблемы от создания нескольких макетов и наименьшей ширины и др.

1 Ответ

0 голосов
/ 15 мая 2018

Если вы установите вес в xml, который вам не нужно изменять во время выполнения, в зависимости от экрана устройства, он сохранит одинаковое соотношение для всех экранов.Я сделал некоторые исправления для вашего макета:

<LinearLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
    android:id="@+id/lnrspnrview"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="6"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <Spinner
            android:id="@+id/spnrcountry"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <Spinner
            android:id="@+id/spnrbusinesscategory"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>


</LinearLayout>

<RelativeLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="4">

    <custom.SquareImageView
        android:id="@+id/edtuploadimage"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center" />
</RelativeLayout>

Здесь я просто даю подсказку, как должна выглядеть структура вашего макета.Если вы следуете этому, вам не нужно менять вес программным образом в зависимости от экрана устройства, потому что он будет одинаковым для всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...