Intereting Posts
Показывать SearchWidget в ActionBar, если пользователь нажимает кнопку поиска устройства Как динамически выделять SIDE дороги (или нарисовать линию рядом) с картами google или mapquest на Android Как определить, есть ли у моего приложения Android утечка памяти? Как обнаружить ходьбу с Android-акселерометром Добавьте весы в файл .pb, экспортированный TensorFlow Android – Как программно установить стиль кнопки в Linearlayout? Поворот маркера по указанию пользователя на Google Maps V2 Android Безопасно ли использовать .getWidth на дисплее, даже если его устаревший Как использовать автономный пакет на android для реагирования на собственный проект? Какой значок правильного размера для drawable-xxhdpi? Android Bluetooth API подключается к нескольким устройствам Sqlite Browser не реагирует при вводе данных в sqlite DialogFragment с настраиваемой компоновкой вызывает сбой в моем приложении Загрузите компоненты Android SDK для автономной установки Как изменить код версии в AndroidManifest.xml с помощью Cordova 3.6.4

Настройте GridView на все размеры экрана

Я пытаюсь реализовать GridView как часть галереи изображений. Я выполнил следующий пример с портала разработчика Android .

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

Учебник GridView от портала разработчика Android

Но теперь к моей проблеме. Когда я хочу реализовать точно такой же GridView в LinearLayout из моего Android-проекта – правильные пропорции ушли – как показано на рисунках ниже. Изображения начинают перекрываться так далее и так далее.

Мой проект андроида

Я совершенно уверен, что это имеет кое-что для моего LinearLayout, который выглядит следующим образом.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widget64" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/widget34" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dp" android:background="@drawable/foto_detail_bg_cell_0" > <ImageView android:id="@+id/flyer" android:layout_width="100dp" android:layout_height="80dp" android:src="@drawable/icon" android:scaleType="centerCrop" /> <LinearLayout android:id="@+id/widget36" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5px" android:orientation="vertical"> <TextView android:id="@+id/toptext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Beat.It" android:textSize="16sp" android:textStyle="bold" android:textColor="@color/white"/> <TextView android:id="@+id/widget39" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="http://www.google.at" android:textColor="@color/white"/> <LinearLayout android:id="@+id/widget40" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/widget41" android:layout_width="58dp" android:layout_height="40dp" android:src="@drawable/facebook_share"/> <ImageView android:id="@+id/widget42" android:layout_width="58dp" android:layout_height="40dp" android:layout_marginLeft="1dp" android:src="@drawable/photocount"/> </LinearLayout> </LinearLayout> </LinearLayout> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" /> </LinearLayout> 

ГЛАВНЫЙ ВОПРОС: XML-формат макета, используемый в учебнике на портале разработчиков Android, использует только GridView без LinearLayout, и он отображается с правильными пропорциями по каждому размеру экрана. Почему это? И почему это не работает должным образом, когда я вставляю GridView в Linear Layout, как в моем проекте?

Solutions Collecting From Web of "Настройте GridView на все размеры экрана"

РЕШИТЬ:

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

 // create a new ImageView for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { //Calculation of ImageView Size - density independent. //maybe you should do this calculation not exactly in this method but put is somewhere else. Resources r = Resources.getSystem(); float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, r.getDisplayMetrics()); imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams((int)px, (int)px)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); //imageView.setPadding(8, 8, 8, 8); imageView.setBackgroundColor(Color.BLUE); } else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; }