Fit recyclerview Elemente auf dem android-Bildschirm
Ich bin in Schwierigkeiten! Ich habe diese RecyclerView wo ich eine GridLayoutManager zu erreichen, zwei Spalten und mehreren Zeilen.
Aber hier geht mein Problem:
Ich habe höchstens 8 Artikel in dieser RecyclerView, und ich möchte, um Sie fit nach der Größe des Displays
Bisher habe ich dieses:
mithilfe dieses Stück code:
Rect rectangle = new Rect();
Window window = ((Activity)context).getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop =
window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;
final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
new int[] { android.R.attr.actionBarSize });
int mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();
int softButtonsHeight = 0;
DisplayMetrics metrics = new DisplayMetrics();
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(metrics);
DisplayMetrics realMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
((Activity)context).getWindowManager().getDefaultDisplay().getRealMetrics(realMetrics);
if(realMetrics.heightPixels > metrics.heightPixels){
softButtonsHeight = realMetrics.heightPixels - metrics.heightPixels;
}
}
ImageView img_Logo = (ImageView)rootView.findViewById(R.id.img_logo_detalhe);
float logoHeight = 0;
//convertendo na mão tamanho do sponsor
if(img_Logo.getVisibility() != GONE) {
logoHeight = 100 * context.getResources().getDisplayMetrics().density;
}
double sizeInPx = (metrics.heightPixels - titleBarHeight - softButtonsHeight - mActionBarSize - logoHeight) / Math.round(list.size() / 2D);
itensAdapter = new OptionItensAdapter(context, list, (int)sizeInPx);
rvOptions.setAdapter(itensAdapter);
und innen OptionItensAdapter Konstruktor an meinem onBindViewHolder
:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, sizeInPx);
holder.imageButton.setLayoutParams(params);
Haben Sie eine Idee haben, würde mich das erreichen?
Vielen Dank im Voraus.
Warum sind Sie mit
Ich würde annehmen, als Antwort auf einige Beispiel für diese Komponenten und Ihre entsprechenden richtigen Weise verwendet werden.
RecyclerView
? Sie sind nicht zu recyceln nichts, da Sie nicht scrollen. Verwenden Sie eine GridLayout
oder TableLayout
oder verschachtelte LinearLayouts
oder eine ConstraintLayout
.Ich würde annehmen, als Antwort auf einige Beispiel für diese Komponenten und Ihre entsprechenden richtigen Weise verwendet werden.
InformationsquelleAutor guisantogui | 2017-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genau die Lösung für dein problem ist neueren Flexible layout-manager für reyclerView
Mehr über das Flexible layout
Beispiel
InformationsquelleAutor Rahul Devanavar
Haben Sie einen Blick auf diese OnBindViewHolder code und ändern Sie es wie pro Ihre Anforderung 😀
Nur dieses posting viewHolder, um zu sehen, was alle Artikel.
InformationsquelleAutor taman neupane
Mein Vorschlag ist, verwenden Sie ein layout ähnlich wie diese statt der RecyclerView, es passt auf jeden Bildschirm. Das layout wird alles tun, was nötig anzupassen, indem Sie sich ohne code.
InformationsquelleAutor Lluis Felisart
Einen
GridLayout
oderConstraint
layout sind viel besseren Entscheidungen zu treffen hier.Einen
RecyclerView
ist (wie der name schon sagt) für die recycling -, die Sie verwenden sollten, wenn Sie haben eine Menge von Ansichten/Kinder und müssen sicherstellen, dass nur die wenigen auf dem Bildschirm Arbeitsspeicher verwenden.Einen
ConstraintLayout
stattdessen können Sie jede Ansicht getrennt und definieren, wie Sie miteinander in Beziehung zu erstellen, die das raster.Einen
GridLayout
wie mein Beispiel unten wird ordnen Sie die Elemente für Sie, ohne recycling.In Ihrem code, den Sie dann zum ändern der Sichtbarkeit Ihrer 8 buttons, die ausgeblendet werden sollen
Wenn Sie möchten, legen Sie programmgesteuert die Element-breiten (oder Höhen), set
useDefaultMargins="true"
und ändern Sie den layout-Parameter (als pro diese Antwort)InformationsquelleAutor Nick Cardoso
Ich hatte gerade eine ähnliche Frage beantwortet, wie dies in diese SO beantworten link
Grundsätzlich erhalten screensize, dann stellen Sie Ihre Höhe entsprechend ein, so dass der Kern von ihm ist :
Oh, stimmt, du musst es abziehen. Sie müssen subtrahieren mit toolbar, statusbar und die Standard-android-btn dann geteilt durch 8. Ich habe lief in Probleme, obwohl sich in erste android-Höhe der Buttons. Einige Handy hat auf dem Bildschirm (Sony Experia), einige hat es unter dem Bildschirm (Zenfone)
InformationsquelleAutor Kevin Murvie
Hinzufügen benutzerdefinierter raster-Zeile und legen Sie Größe und legen Sie dann automatisch anpassen automatisch anpassen wie pro Bildschirm
InformationsquelleAutor parik dhakan
Warum verwenden Sie
RecyclerView
??GridLayout
ist die beste option hier, wenn man Feste Anzahl von Elementen. Sie können spielen, mitweights
des Objekts.Hier ist ein Beispiel zeigt, wie fit 6
LinearLayout
s an einen BildschirmKönnen Sie weitere Elemente in ähnlicher Weise
InformationsquelleAutor Waqas Ahmed Ansari
Wenn Ihr Menü nicht dynamisch ändert, ich.e Sie haben die Menü-Einstellungen auf API, dann müssen Sie nicht haben, um zu verwenden
Recyclerview
oderGridView
zum Auffüllen dieses layout. Ich prever zu kombinierenLinearLayout
(s) mit einigen Einschränkungen zu füllen statische layout:Dies ist das Ergebnis:
InformationsquelleAutor jemsnaban
Wenn Sie fix 8 Elemente, dann können Sie LinearLayout-und SDP-Bibliothek für die icon Größe wie dieser :
Mit SDP Bibliothek, die Sie nicht brauchen, zu schreiben, dimension-Datei für verschiedene Bildschirm-Größe
Screenshots :
Nexus 4 :
Nexus 5X :
Nexus 6 :
InformationsquelleAutor SANAT
InformationsquelleAutor Hitesh Shukla
Wenn Sie ein Problem lösen müssen-Ansichten auf dem Bildschirm, als Sie brauchen nicht zu nehmen recyclerView. Sie können spielen, mit dem Gewicht und die Elemente passen auf den Bildschirm.
In Ihrem Szenario können Sie Folgen Sie den nachstehenden code
Hoffe, Es wird für Sie arbeiten.
InformationsquelleAutor Mushahid Khatri