Кнопки изображений в GrdView разных размеров экрана - PullRequest
0 голосов
/ 28 марта 2012

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

Он создал макет экрана для экрана нормального размера и вставил в него GridView.

<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:numColumns="auto_fit"
    android:verticalSpacing="45dp"
    android:horizontalSpacing="10dp"
    android:columnWidth="120dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
    android:layout_marginTop="30dp"
    android:scrollbars="none"
/>

На изображениях со стороны кода, определенных как integer массив.

Integer[] a1 = {                R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,                R.drawable.image5,R.drawable.image6,R.drawable.image6,R.drawable.image7,R.drawable.image8,              R.drawable.image9,R.drawable.image10,R.drawable.image11
        };

Вид сетки с целочисленным массивом с этим кодом.

GridView gridview = (GridView) findViewById(R.id.gridview);     
gridview.setAdapter(new ImageButtonAdapter(this,infox));

Итак, вот класс ImageButtonAdapter

public class ImageButtonAdapter extends BaseAdapter {

        private Context mContext;

        public ImageButtonAdapter(Context c, Integer[] imageIds) {
            mContext = c;           
            mThumbIds = imageIds;
        }

        public int getCount() {
            return mThumbIds.length;
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return 0;
        }

        public View getView(final int position, View convertView, ViewGroup parent) {

            ImageButton imageButtonx;
            if (convertView == null) {  
                imageButtonx = new ImageButton(mContext);
                imageButtonx.setBackgroundColor(Color.TRANSPARENT);                         
                **imageButtonx.setLayoutParams(new GridView.LayoutParams(160, 160));**
                imageButtonx.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageButtonx.setPadding(5, 5, 5, 5);
                /* if ( position == 10 )
                {
                    imageButtonx.setVisibility(ImageButton.GONE);
                }
                */

            } else {
                imageButtonx = (ImageButton) convertView;
            }

                setMyTag(imageButtonx,mThumbIds[position]);
            imageButtonx.setImageResource(mThumbIds[position]);

            return imageButtonx;
            }
        private Integer[] mThumbIds;
    }

Кроме того, папка res \ drawable-hdpi содержит изображения с высоким разрешением 167x161 px, а папка res \ drawable-mdpi - изображения с нормальным разрешением 82x72 px.

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

Есть ли у вас какие-либо предложения, как я могу решить эту проблему и поддержать большие нормальные и маленькие экраны?

Ответы [ 2 ]

0 голосов
/ 28 марта 2012
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

Это то, что я обычно делаю, надеюсь, это поможет.

0 голосов
/ 28 марта 2012

да, из-за этого вы получаете эту проблему

imageButtonx.setLayoutParams(new GridView.LayoutParams(160, 160))

изменить этот код следующим образом

imageButtonx.setLayoutParams(new GridView.LayoutParams(
                      (int) getResources().getDimension(R.dimen.width),                                                                                   
                      (int) getResources().getDimension(R.dimen.height)));

хранить ширину, значение высоты в папке values-->dimentions.xml, как это

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="width">80dp</dimen>  // your desired values 
   <dimen name="height">80dp</dimen>
</resources> 

HTH ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...