Изменение динамической ширины и высоты размещения - программирование
Подтвердить что ты не робот

Изменение динамической ширины и высоты размещения

Привет, я использую следующую структуру раскладки внутри LinearLayout

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tv1"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:paddingLeft="10dp"
            android:textColor="#000" />

        <TextView
            android:id="@+id/tv2"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:gravity="right"
            android:paddingRight="10dp"
            android:textColor="#000" />
    </TableRow>
</TableLayout>

<ImageView
    android:id="@+id/img1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="320px"
    android:layout_height="320px"
    android:gravity="center" >
</RelativeLayout>

и хотите динамически устанавливать относительную ширину и высоту расположения из java файла, а не устанавливать его на 320 пикселей в XML файле, но не в состоянии сделать это. Изменение ориентации не является проблемой, поскольку я ограничиваю его только в режиме Portrait. Можно установить относительный макет в полноэкранном режиме с помощью match_parent, но я должен поместить другие виды на экран, так что это возможно, или я должен достичь этого по-другому...

4b9b3361

Ответ 1

Android не обновляет макет представлений с помощью wrap_content после его отображения. Даже с invalidate() или requestLayout(). Поэтому, если вы добавляете дочерний режим или динамически изменяете содержимое, вы ввернуты.

getLayoutParams().height = x plus requestLayout() являются хорошим решением, если вы знаете "x", и если вам нужно сделать это ТОЛЬКО ОДИН РАЗ. После этого wrap_content в LayoutParams теряется, так как вы его переопределили.

Чтобы решить эту проблему, я написал статический класс, который пересчитывает размеры и заставляет обновлять макет для представлений с помощью wrap_content. Код и инструкции для использования доступны здесь:

https://github.com/ea167/android-layout-wrap-content-updater

Наслаждайтесь!

Ответ 2

попробуйте использовать

getLayoutParams().height= x;
requestLayout(); or invalidate(); 

Ответ 3

укажите идентификатор вашего относительного расположения в .xml:

android:id="@+id/relativelayout"

теперь в вашем java файле напишите это:

RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout);

RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth,
                        RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight);

Rl.setLayoutParams(layout_description);

Ответ 4

Из кода ниже u можно получить высоту и ширину устройства: -

Display display = getWindowManager().getDefaultDisplay();
    int width = (display.getWidth() );
    int height = (display.getHeight() );

paramsTop ur realative layout: -

Теперь вы можете установить высоту или ширину, что вы хотите.

        paramsTop = new RelativeLayout.LayoutParams(width, height);

Ответ 5

Динамические размеры представлений можно задать с помощью LayoutParams. Что-то вроде этого:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id);
// Gets the layout params that will allow you to resize the layout
LayoutParams params = layout.getLayoutParams();
params.height = 320;
params.width = 320;

Ответ 6

Я столкнулся с этой проблемой, лучшим решением для изменения относительной ширины и высоты размещения динамически, как это

RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.width =200;
 params.height =200;
 params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        relMain.setLayoutParams(params);

Ответ 7

Если вы намереваетесь изменить "Высота", это сделает трюк.

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId);
relativeLayout.getLayoutParams().height = 100;
relativeLayout.getLayoutParams().width = 100;