android Как растянуть строки в gridview, чтобы заполнить экран? - PullRequest
17 голосов
/ 15 августа 2011

У меня есть простой GridView (с одним столбцом и шестью строками), который отображает ImageView с TextView в ячейке (я создаю адаптер).Как растянуть строки, чтобы заполнить всю высоту экрана ??Теперь у меня есть немного места под ячейками ...

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:orientation="horizontal">
<LinearLayout android:layout_height="fill_parent"
    android:layout_width="150dp" 
    android:orientation="vertical"
    android:id="@+id/left">
    <include layout="@layout/menu_grid"></include>
</LinearLayout>
<LinearLayout android:layout_height="fill_parent"
    android:layout_width="fill_parent" 
    android:orientation="vertical"
    android:id="@+id/right">
    <ImageView android:src="@drawable/image"
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:id="@+id/imageMain" 
        android:layout_gravity="center">
    </ImageView>
</LinearLayout>

menu_grid.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<GridView android:layout_height="wrap_content"
    android:layout_width="fill_parent" 
    android:id="@+id/gridView"
    android:padding="10dp" 
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp" 
    android:numColumns="1"
    android:columnWidth="100dp" 
    android:stretchMode="columnWidth"
    android:gravity="center"></GridView>

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:gravity="fill_horizontal">
<ImageView android:src="@drawable/icon"
    android:layout_height="70dp" android:id="@+id/imageIcon"
    android:layout_width="70dp" android:layout_gravity="center_horizontal"></ImageView>
<TextView android:id="@+id/textIcon" android:text="TextView"
    android:layout_gravity="center" android:layout_height="wrap_content"
    android:layout_width="wrap_content"></TextView>

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {
//....some code
//....

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if (convertView == null) {  
        LayoutInflater inflater = (LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.item, null);

        TextView text = (TextView) view.findViewById(R.id.textIcon);
        text.setText(labels[position]);

        ImageView image = (ImageView) view.findViewById(R.id.imageIcon);
        image.setImageResource(icons[position]);        

    } else {
        view = convertView;
    }

    return view;
}

}

Ответы [ 4 ]

30 голосов
/ 15 июня 2012

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

Для этого необходимо установить минимальную высоту макета элемента gridView (в вашем случае это item.xml) на (высота экрана) / 6, где 6 - это (количество строк)Вы должны заполнить).Эта минимальная высота может быть установлена ​​в используемом адаптере.

Чтобы узнать высоту экрана устройства:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int width = metrics.widthPixels;
int height = metrics.heightPixels;

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

, а затем установить минимальную высоту:

view = inflater.inflate(R.layout.item, null);
view.setMinimumHeight(GridViewActivity.height/6);

Я попробовал это после просмотра поста, и этоработал отлично.

3 голосов
/ 15 июня 2012

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

// this you can set inside your view.
android:paddingLeft="5px"
android:paddingRight="5px"
android:paddingTop="10px"
android:paddingBottom="10px"

// this you can set to your any widgets like TextView/Layouts/Buttons etc..
setPadding(top, left, bottom, right);
0 голосов
/ 02 июля 2018

Расширение макета, скажем, Framelayout, затем переопределите метод onMeasure.

public class CameraView extends FrameLayout 

public TextView titleView;

public CameraView(Context context,AttributeSet attrs) {
    super(context, attrs)
    titleView = rootView.findViewById(R.id.titleView);
}


@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}

Затем вы можете использовать это представление в BaseAdapter и установить для layout_width и layout_height значение match_parent

0 голосов
/ 15 августа 2011

Надеюсь, я вас правильно понимаю, если это так просто, как изменить GridView на fill_parent instead из wrap_content.

Изменить

<GridView android:layout_height="wrap_content"

на

<GridView android:layout_height="fill_parent"

Если это не так, вероятно, вы хотите изменить высоту макета в LinearLayout файла item.xml.

...