2012-01-02 12 views
19

La vista de cuadrícula de mi aplicación tiene 3 filas y 3 columnas. Quiero que esto llene la pantalla, independientemente del tamaño de la pantalla del dispositivo.Android gridview que se ajusta al tamaño de pantalla

Intenté obtener el tamaño de la ventana y configurar los formatos de forma acorde. Pero esto no está dando una alineación perfecta, ya que funciona con weightsum en linearlayout.

Entonces, ¿podemos usar weightsum para gridview o hay alguna otra propiedad de Android que se pueda usar? Muchas gracias por el tiempo y la respuesta.

<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" /> 

cada elemento de la cuadrícula es

<?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> 

código del adaptador:

@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; 

} 

pls ver la línea

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

llegué a este valor con algunos ensayos sobre diferentes emulador tamaño. Pero no creo que sea una forma correcta de definir la altura y el ancho.

+0

Muestre un cierto código. ¿Que estas intentando? – TryTryAgain

+0

he agregado. arrendamiento echar un vistazo. Gracias por su tiempo y ayuda. – png

+0

El mismo problema ... ¿Podrían ayudarme, cómo están fuera de esto? – Sreeram

Respuesta

15

Por lo que entendí su pregunta, ya que no ha publicado ningún código, lo que está tratando de hacer es, quiere que gridview aparezca en pantalla completa.

En primer lugar debe utilizar algún diseño para poner su gridview en Haga lo siguiente:.

altura Marca y ancho de la diseño para llenar los padres:

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

a continuación, establecer la altura y ancho de su vista de cuadrícula para fill_parent también.

Bueno, esto es solo una supuesta solución que podría haber estado trabajando de esta manera. poner un poco de código sería mucho mejor. Espero que esto funcione para usted.

Actualización: bien el problema puede estar aquí:

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

cambio a:

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

Espero que esto funcione para usted.

+0

que he agregado. arrendamiento echar un vistazo. Gracias por su tiempo y ayuda – png

+0

@ Preetha ... vea la respuesta actualizada. –

+0

funciona ... muchas gracias – png

10

@preetha: en primer lugar, mire este ejemplo que utilicé esto y mi diseño no afectó independientemente de la altura y el ancho de diseño ....

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

establecer lo siguiente en 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" 

esperanza esto ayuda ...

+1

Gracias. Lo había intentado, no funcionaba. Para mí, no: cols debe ser tres. También mi cuadrícula es una vista de imagen + texto – png

Cuestiones relacionadas