2016-08-29 21 views
0

Ich habe eine Gridview, die 4 Bildansichten von einem Adapter bekommt, ich möchte sie 2x2 skaliert haben und auf meinem Bildschirm angepasst haben.Gridlayout mit 2x2 Bildansicht Android

Heres der Code für die:

@Override 
protected View createQuizContentView() { 
    mAnswerView = new GridView(getContext()); 

    StateListDrawable selector = new StateListDrawable(); 
    selector.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(Color.LTGRAY)); 
    selector.addState(new int[]{-android.R.attr.state_pressed}, new ColorDrawable(Color.WHITE)); 

    mAnswerView.setSelector(selector); 
    //mAnswerView.setSelector(R.drawable.selector_button); 

    mAnswerView.setNumColumns(2); 
    mAnswerView.setAdapter(new OptionsQuizAdapter(getQuiz().getOptions(), 
      R.layout.imgitem_answer)); 


    mAnswerView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      mAnswered = position; 
      allowAnswers(mAnswerView,position); 
     } 
    }); 
    return mAnswerView; 
} 

und

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     convertView = inflater.inflate(mLayoutId, parent, false); 
    } 
    final ImageView imageView; 
    String text = getText(position); 
    Context context = parent.getContext(); 

    Resources resources = context.getResources(); 

    String stripped = text.replace("-", ""); 
    final int resourceId = resources.getIdentifier(stripped, "drawable", 
      context.getPackageName()); 

    Drawable d = ContextCompat.getDrawable(context, resourceId); 

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int height = size.y; 

    double dviewheight = height/3.32; 
    int viewheight = (int)dviewheight; 

    imageView = (ImageView) convertView; 
    imageView.setPadding(64, 64, 64, 64); 

    convertView.setLayoutParams(newGridView.LayoutParams(GridView.AUTO_FIT, viewheight)); 

    imageView.setImageDrawable(d); 

    return imageView; 
} 

Im Moment i'am die Höhe des im Innern des Bildansicht Grid Einstellung mit der Bildschirmgröße erhalten und Aufteilen der funktioniert gut bei der meisten Geräteauflösung, aber ich würde immer noch eine dynamischere Lösung bevorzugen, die funktionieren würde, wenn ich der Gitteransicht mehr Zeilen hinzufügen würde.

Dies ist, wie es aussieht:

Screensize/magic number

Wenn ich GridView.AUTO_FIT auf der Höhe verwenden wird es eine Menge ungenutzter Raum hinzufügen und ich eine Scrollbar auf der rechten Seite wie diese:

Ich habe mehrere Konfigurationen und Strecken versucht, aber keiner scheint zu funktionieren. Irgendeine Möglichkeit, was ich programmatisch ohne XML erreichen will?

+0

'Irgendeine Möglichkeit zu erreichen, was ich programmatisch ohne XML will?' Und ** warum ** willst du es ** auf die harte Tour machen **? –

+0

Wenn Sie API-Level 21 und höher verwenden, können Sie versuchen, das 'Gewicht' aller einzelnen 'Ansichten' auf 1 zu setzen. Dies verteilt die gesamte Breite und Höhe des' GridLayout'. – Marcel50506

Antwort

1

Versuchen Sie Folgendes: gridView.setNumColumns (2);

+0

Funktioniert nicht, Bereits im Code. – user15931