Динамическое добавление видов в сетке не принимает указанный размер - PullRequest
0 голосов
/ 20 мая 2018

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

enter image description here

Что яДля достижения этой цели указывается следующее:

activity_main.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    tools:context=".MainActivity">

    <LinearLayout
        android:weightSum="1"
        android:id="@+id/container"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <GridLayout
            android:id="@+id/myGrid"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#FFFFFF"
            android:layout_weight="1">

        </GridLayout>


    </LinearLayout>

</ScrollView>

item_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/item"
    android:background="@color/itemBackground"
    android:layout_weight="4"
    android:layout_margin="20dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/cImage"
        android:layout_marginTop="20dp"
        android:layout_marginRight="40dp"
        android:layout_marginLeft="40dp"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:src="@drawable/icon"/>

    <TextView
        android:id="@+id/cText"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.25"
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:textAlignment="center"
        android:layout_marginBottom="10dp"
        android:text="ORAL CARE"/>

</LinearLayout>

MainActivity.java: (код добавления элементов в макет сетки)

gridLayout = (GridLayout) findViewById(R.id.myGrid);
        myArray = new String[]{"pink","blue","red","orange","green","purple","white","black","brown","other"};
        int total = myArray.length;
        int column =  2;
        int row = total / column;
        gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS);
        gridLayout.setColumnCount(column);
        gridLayout.setRowCount(row + 1);
        LinearLayout linearLayoutItem;
        Display display = getWindowManager().getDefaultDisplay();
        int displayWidth = display.getWidth();
        int displayHeight = display.getHeight();
        for(int i =0, c = 0, r = 0; i < total; i++, c++)
        {
            if(c == column)
            {
                c = 0;
                r++;
            }
            LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = inflater.inflate(R.layout.item_layout, gridLayout, false);
            TextView cText = (TextView) v.findViewById(R.id.cText);
            ImageView cImage = (ImageView) v.findViewById(R.id.cImage);
            cText.setText(myArray[i]);
            cImage.setImageResource(R.drawable.icon);


            v.setMinimumWidth(displayWidth/2); // setting width and height
            v.setMinimumHeight(displayWidth/2);
            gridLayout.addView(v);

            GridLayout.LayoutParams param =new GridLayout.LayoutParams();
            param.height = GridLayout.LayoutParams.WRAP_CONTENT;
            param.width = GridLayout.LayoutParams.WRAP_CONTENT;
            param.rightMargin = 20;
            param.topMargin = 20;
            param.setGravity(Gravity.CENTER);
            param.columnSpec = GridLayout.spec(c);
            param.rowSpec = GridLayout.spec(r);

Этот код отлично добавляет представления в макет сетки.Но проблема в том, что он не регулирует размер вида в соответствии с экраном, как показано:

enter image description here

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

Я хочу:

  1. Отрегулировать виды (серые цвета с изображением и текстом) в соответствии с размером экрана, на котором он запущен.В качестве ширины сетки используется match_parent.
  2. Высота представления должна быть пропорциональна ширине представления.
  3. Размер изображения в представлении должен быть пропорциональна размеру представления.

Спасибо заранее.Любая помощь будет оценена.

...