Android gridview подстраивается под размер экрана - PullRequest
21 голосов
/ 02 января 2012

Вид сетки моего приложения состоит из 3 строк и 3 столбцов. Я хочу, чтобы это заполняло экран, независимо от размера экрана устройства.

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

Итак, можем ли мы использовать weightsum для gridview или есть какое-либо другое свойство android, которое можно использовать. Большое спасибо за время и ответ.

<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:layout_below="@+id/text1view"
                android:background="@drawable/home_bg"
                android:gravity="center"
                android:horizontalSpacing="10dip"
                android:numColumns="3"
                android:stretchMode="columnWidth" />

каждый элемент сетки

<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:id="@+id/grid_item_image"
    android:layout_width="wrap_content"
    android:layout_height="75dip"
    android:layout_margin="0dip"
    android:padding="0dip" >
</ImageView>

<TextView
    android:id="@+id/grid_item_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/grid_item_image"
    android:gravity="center_horizontal"
    android:padding="0dip"
    android:textColor="#000000"
    android:textSize="10sp" >
</TextView>

код адаптера:

    @Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.griditems, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView
                .findViewById(R.id.grid_item_text);

        holder.image = (ImageView) convertView
                .findViewById(R.id.grid_item_image);

        // if it's not recycled, initialize some attributes
        holder.image.setImageResource(gridItemIds[position]);
        holder.text1.setText(gridTitles[position]);
        int h = mContext.getResources().getDisplayMetrics().densityDpi;

        // holder.image.setLayoutParams(new LayoutParams(h-50,h-50));
        convertView.setLayoutParams(new GridView.LayoutParams(h - 45,
                h - 39));
        // holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
        // holder.image.setScaleType(ImageView.ScaleType.FIT_XY);
        // holder.image.setPadding(20, 20, 20, 20);

        // convertView.setLayoutParams(new GridView.LayoutParams(Utils
        // .getLayoutParameter(), Utils.getLayoutParameter()+50));

        holder.image.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                new ModuleManager().startModuleACtivity(position, mContext);
            }
        });
        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    return convertView;
}

static class ViewHolder {
    TextView text1;
    ImageView image;

}

Пожалуйста, смотрите строку

convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

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

Ответы [ 2 ]

15 голосов
/ 02 января 2012

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

Во-первых, вы должны использовать какой-то макет, чтобы вставить свой gridview. Выполните следующие действия:

Установите высоту и ширину макета , чтобы заполнить родительский элемент:

android:layout_width="fill_parent"
android:layout_height="fill_parent"

затем установите высоту и ширину вашего gridview равным fill_parent.

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

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

 convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

изменить на:

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
 convertView.setLayoutParams(new GridView.LayoutParams(params));

Надеюсь этоработает для вас.

11 голосов
/ 03 января 2012

@ preetha: прежде всего посмотрите на этот пример, который я использовал, и мой макет не влиял независимо от высоты и ширины устройства ....

http://developer.android.com/resources/tutorials/views/hello-gridview.html

установите следующее в xml

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"

надеюсь, это поможет ...

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