2016-05-25 12 views
0

Ich zeige einen Dialog, um die Liste der Bilder anzuzeigen, und wähle eine davon aus. Ich habe einen Adapter erstellt, um die Bilder in der Rasteransicht zu setzen.Wie werden Bilder in der Rasteransicht programmatisch ausgerichtet?

Ich bin diesem Link gefolgt: http://www.tutorialspoint.com/android/android_grid_view.htm, um die Idee zu bekommen.

Aber jetzt zeigt der Dialog Bilder sehr weit voneinander entfernt und nicht richtig ausgerichtet. jetzt

Dialog ist wie folgt:

enter image description here

Adapter:

public class ImageAdapter extends BaseAdapter { 
    Context Context; 
    int [] imageId; 

    public ImageAdapter(Context context, int[] prgmImages) { 
     // TODO Auto-generated constructor stub 
     Context = context; 
     imageId = prgmImages; 

    } 

    // 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) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(Context); 
      imageView.setLayoutParams(new GridView.LayoutParams(85,85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(2,2,2,2); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(imageId[position]); 
     return imageView; 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return imageId.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

} 

zeigen Dialogcode:

private void showAlertDialog() { 

    GridView gridView = new GridView(this); 

    int[] mThumbIds = { 
      R.drawable.roundicons05,R.drawable.roundicons08, 
      R.drawable.roundicons16,R.drawable.roundicons37, 
    }; 

    gridView.setAdapter(new ImageAdapter(CheckListActivity.this,mThumbIds)); 
    gridView.setNumColumns(3); 
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // do something here 
     } 
    }); 

    // Set grid view to alertDialog 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setView(gridView); 
    builder.setTitle("Select icon"); 
    builder.show(); 

} 

Wie kann ich dies richtig zum Beispiel in der Mitte auszurichten, und 4 Bilder in einer Reihe etc .. Danke.

+0

ich denke einstellen, da dies festgelegt ist: imageView.setLayoutParams (new GridView.LayoutParams (85,85)); Ich habe versucht, hier Wrap-Inhalt zu verwenden, aber es zeigt immer noch das gleiche. @AdityaVyas –

Antwort

0
<GridView 

    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnWidth="150dp" 
    android:gravity="center" 
    android:horizontalSpacing="10dp" 
    android:verticalSpacing="10dp" 
    android:listSelector="#fff" 
    android:numColumns="3" 
    android:scrollbars="none" 
    android:stretchMode="spacingWidthUniform" 
    android:paddingTop="10dp" 
    android:layout_margin="5dp"> 

</GridView> 

Um diese Eigenschaften dynamisch festgelegt, da u gesagt, dass Sie dies dynamisch Rasteransicht dann hinzufügen, wie Sie diese Eigenschaften durch java

mGridView.setGravity(Gravity.CENTER); 
    mGridView.setColumnWidth(150); 
    mGridView.setHorizontalSpacing(20); 
    mGridView.setVerticalSpacing(20); 
    mGridView.setNumColumns(3); 
    mGridView.setStretchMode(GridView.STRETCH_SPACING_UNIFORM); 
+0

Ich habe Rasteransicht programmatisch erstellt. Ich habe kein Layout dafür. Wie macht man das? @Adeel Turk –

+0

ok lass mich nach dieser Lösung suchen –

0

versuchen

imageView.setLayoutParams(new GridView.LayoutParams(48,48)); 
+0

Bilder wurden sehr klein mit diesem und noch Lücke ist da. @ Shubham –

+0

Bilder wurden sehr klein mit diesem und noch Lücke ist da. @ Aditya Vyas –

+0

, weil Sie Höhe und Breite von 85 bis 48 ändern ..besser versuchen adjustviewbound –

0

i Sie mit setAdjustViewBounds wahr versuchen vorschlagen. Es wird ausrichten Imageview

+0

Ich habe Höhe und Breite als 85 gehalten und setAdjustViewBounds implementiert. Trotzdem zeigt es dasselbe wie das hochgeladene Bild. @Aditya Vyas –

+0

Haben Sie die Schwerkraft versucht? –

+0

Ja, ich habe die Gitteransichten geändert, um die Gravitation zu zentrieren. Jetzt ist es also in der Mitte, aber die Bilder haben immer mehr Lücken dazwischen. gridView.setGravity (Gravity.CENTER); @Aditya Vyas –

1

richtiges Image Um zu zeigen, xml-Layout-Datei machen und die richtige Polsterung und Marge anwenden und dieses xml in der getView Methode Adapter aufblasen So:

Ihr xml Layout grid_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"> 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 

Adapters getView Methode:

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ImageView imageView; 

    if (convertView == null) 
    { 
     LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.grid_item, null); 
     imageView = (ImageView) convertView.findViewById(R.id.imgDoc); 
     convertView.setTag(viewHolder); 
    } 
    else 
    { 
     imageView = (ImageView) convertView; 
    } 

imageView.setImageResource(imageId[position]);  
return convertView; 
    } 

für mehr richtige Layout h gelten OrizontalSpacing und VerticalSpacing in Gridview.

android:horizontalSpacing="10dp" 
    android:verticalSpacing="10dp" 
+0

Ich habe Rasteransicht programmatisch erstellt. Ich habe kein Layout dafür. Wie macht man das? @Giteeka Sawlani –

+0

Wenn Sie kein Layout für Gridview Layout haben, dann ist es in Ordnung. Aber ich sage, dass ich ein Layout für ImageView erstellen soll, das ich als Antwort gezeigt habe. –