15 Stimmen

Android ScrollView Höhe für angezeigten Inhalt festlegen

Ich habe große Schwierigkeiten, das Problem zu lösen, einen Bereich mit statischer Höhe innerhalb eines Layouts scrollbar zu machen. Ich habe drei lange Listen, die auf dem gleichen Bildschirm angezeigt werden müssen, und es wäre völlig unpraktisch, alle Einträge nacheinander anzuzeigen, da Sie dann möglicherweise hunderte von Einträgen scrollen müssten, um eine Kategorie zu überspringen.

Angenommen, ich habe eine ScrollView mit einem LinearLayout darin, ich möchte, dass dies maximal 250dp Höhe auf dem Bildschirm einnimmt und unabhängig scrollbar ist, sobald es mit mehr Einträgen befüllt ist als in 250dp Platz haben.

Was ich jetzt habe, ist:

Wenn befüllt, dehnen sich die ScrollView und das LinearLayout einfach so weit aus, wie sie müssen, um den Inhalt anzupassen, und zeigen alles anstelle davon, ein "Fenster" von 250dp/px (jede Maßeinheit wäre schön) zu haben, mit dem der Inhalt darin scrollbar ist.

Ich bin neu auf der Android-Plattform, daher ist die Antwort vielleicht offensichtlich und ich habe die Sprache einfach nicht verstanden, aber jede Hilfe wäre sehr willkommen! Vielen Dank

--- GELÖST: Ein LinearLayout außerhalb der ScrollView mit der Höhe platzieren.

22voto

Mike Punkte 4532

Mit Hilfe von dieser Antwort konnte ich eine sehr einfache ScrollView-Komponente zusammenstellen, die Sie für diesen Fall verwenden können:

Erstellen Sie eine benutzerdefinierte Klasse, die ScrollView erweitert, und führen Sie die folgenden Änderungen durch:

public class MaxHeightScrollView extends ScrollView {

    private int maxHeight;

    public MaxHeightScrollView(Context context) {
        super(context);
    }

    public MaxHeightScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        if (attrs != null) {
            TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightScrollView);
            maxHeight = styledAttrs.getDimensionPixelSize(R.styleable.MaxHeightScrollView_maxHeight, 200); //200 is a default value
            styledAttrs.recycle();
        }
    }

   @Override
   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
       super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   }
}

Und dann ist nur noch eine kleine Sache übrig, um Ihr Styleable in der attrs.xml-Datei Ihres Werteordners zu deklarieren (Wenn Sie noch keinen haben, erstellen Sie einfach eine XML-Datei mit diesem Namen im Werteordner Ihres Projekts im res-Ordner). Fügen Sie dort die folgenden Zeilen hinzu:

Und verwenden Sie Ihre neue ScrollView wie folgt:

Dank geht an whizzle für die schnelle Umsetzung!

4voto

Volodymyr Kulyk Punkte 6231

Meine einfache Lösung.
Setze die ScrollView-Höhe in XML:

android:layout_height="wrap_content"

Füge diesen Code hinzu, um die maximale Höhe auf 200 zu setzen, wenn die aktuelle gemessene Höhe größer als 200 ist

sv.measure(0, 0);
if (nsv.getMeasuredHeight() > 200) {
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                      ViewGroup.LayoutParams.MATCH_PARENT, 200);
        sv.setLayoutParams(lp);
}

In meinem Beispiel ist das ScrollView in einem LinearLayout enthalten, daher habe ich LinearLayout.LayoutParams verwendet.

3voto

Androiderson Punkte 15995

Was du brauchst, ist eine maxHeight. Aber da Ansichten dies nicht unterstützen, müssen Sie einen Workaround verwenden.

Schau dir diese Antwort an:

https://stackoverflow.com/a/13811461/770467

2voto

Denys Lobur Punkte 104

Fügen Sie Ihrem ScrollView ein Layout mit fester Höhe hinzu

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X