Как сделать сетку из 2 столбцов с разными размерами? - PullRequest
0 голосов
/ 31 октября 2018

Это сводит меня с ума уже несколько часов. Я просто хочу определить GridLayout с 2 столбцами. Первый столбец должен занимать 70% от общей ширины. Второй столбец должен занимать 30%. Все образцы, которые я смог найти здесь, представляют собой столбцы одинакового размера. Кроме того, я настраиваю содержимое ячейки, чтобы приспособиться к размерам ячейки, а не наоборот.

Возможно, я ошибаюсь, но мне показалось, что я понимаю

андроид: layout_columnWeight

это способ управления шириной столбца?

Итак, вот мой код:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnCount="2"
    android:orientation="horizontal"
    android:rowCount="5">
    <TextView
        android:layout_gravity="fill_horizontal"
        android:layout_rowSpan="1"
        android:text="@string/goals"
        fontPath="fonts/Ubuntu-Bold.ttf" />
    <ImageButton
        android:src="@drawable/baseline_settings_black_18dp"
        android:scaleType="fitCenter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?android:selectableItemBackground" />
    <TextView
        android:layout_gravity="fill_horizontal"
        android:text="Stabiliser mon poinds à 90kg"
        android:id="@+id/objective1" />
    <Com.Syncfusion.Gauges.SfCircularGauge.SfCircularGauge
        android:layout_column="1"
        android:layout_row="1"
        android:layout_rowSpan="1"
        android:layout_columnSpan="1"
        android:layout_columnWeight="1"
        android:layout_height="50sp"
        android:layout_width="0sp"
        android:layout_gravity="fill_horizontal"
        android:id="@+id/sfCircularGaugeGoal1Score" />
    <TextView
        android:layout_gravity="fill_horizontal"
        android:text="Manger plu sain"
        android:id="@+id/objective2" />
    <Com.Syncfusion.Gauges.SfCircularGauge.SfCircularGauge
                android:layout_column="1"
        android:layout_rowSpan="1"
        android:layout_columnSpan="1"
        android:layout_columnWeight="1"
        android:layout_height="50sp"
        android:layout_width="0sp"
        android:layout_gravity="fill_horizontal"
        android:id="@+id/sfCircularGaugeGoal2Score" />
    <TextView
        android:layout_gravity="fill_horizontal"
        android:text="Pratiquer des activités en famille régulièrement"
        android:id="@+id/objective3" />
    <Com.Syncfusion.Gauges.SfCircularGauge.SfCircularGauge
        android:layout_column="1"
        android:layout_rowSpan="1"
        android:layout_columnSpan="1"
        android:layout_columnWeight="1"
        android:layout_height="50sp"
        android:layout_width="0sp"
        android:layout_gravity="fill_horizontal"
        android:id="@+id/sfCircularGaugeGoal3Score" />
    <TextView
        android:layout_gravity="fill_horizontal"
        android:text="Augmenter mes revenus"
        android:id="@+id/objective4" />
    <Com.Syncfusion.Gauges.SfCircularGauge.SfCircularGauge
        android:layout_column="1"
        android:layout_rowSpan="1"
        android:layout_columnSpan="1"
        android:layout_columnWeight="1"
        android:layout_height="50sp"
        android:layout_width="0sp"
        android:layout_gravity="fill_horizontal"
        android:id="@+id/sfCircularGaugeGoal4Score" />
</GridLayout>

Результат в конструкторе VS для Mac:

enter image description here

Но во время выполнения я не вижу элементов управления в каждом ряду слева. Обратите внимание, что текст изменяется во время выполнения, и есть только одна строка с содержимым.

enter image description here

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Я согласен с другим ответом, что LinearLayout - это, вероятно, путь.

Вот как это сделать с помощью GridLayout:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnCount="2"
    android:orientation="horizontal"
    android:rowCount="5">
    <TextView
        android:layout_columnWeight="7"
        android:text="1"/>
    <TextView
        android:layout_columnWeight="3"
        android:text="2"/>
    <TextView
        android:layout_columnWeight="7"
        android:text="3"/>
    <TextView
        android:layout_columnWeight="3"
        android:text="4"/>
    <TextView
        android:layout_columnWeight="7"
        android:text="5"/>
    <TextView
        android:layout_columnWeight="3"
        android:text="6"/>
    <TextView
        android:layout_columnWeight="7"
        android:text="7"/>
    <TextView
        android:layout_columnWeight="3"
        android:text="8"/>
    <TextView
        android:layout_columnWeight="7"
        android:text="9"/>
</GridLayout>

А вот как это сделать с помощью LinearLayout: (Я отредактировал другой ответ, но он не отображается, потому что мне не хватает репутации)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="7"
        android:orientation="vertical">
        <!--add 70% content here -->
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:orientation="vertical">
        <!--add 30% content here -->
    </LinearLayout>
</LinearLayout>
0 голосов
/ 31 октября 2018

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tempo_activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

      <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:weightSum="10">


            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:layout_weight="7">

               <!--add 30% content here -->

           </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:layout_weight="3">

               <!--add 70% content here -->

           </LinearLayout>

      </LinearLayout>

</LinearLayout>
...