Android NestedScrollView hat falsche Größe nach app: layout_behavior

Da Google die Design-Support-Bibliothek für Android veröffentlicht hat, gibt es viele schöne Dinge, die ohne Implementierung von benutzerdefiniertem Code durchgeführt werden können. Während ich die benutzerdefinierten Ansichten in diesem lib getestet habe, habe ich eine schlechtere Sache gefunden, und ich wusste nicht, ob dies ein Fehler ist oder nicht.

Ich habe das Cheesesquare-Projekt auf Github gefunden. In der action_detail.xml (Layoutdatei) befinden sich 3 CardViews im NestedScrollView. Wenn du 2 davon löschst, kannst du sehen, dass das NestedScrollView nicht die volle Größe des übergeordneten (match_parent) hat. Das NestedScrollView ist an die Unterseite der übergeordneten Ansicht gebunden. Http://i.stack.imgur.com/BXl7w.png

  • Weird Fragment Lebenszyklus Fehler
  • Android objectAnimator animieren backgroundFarbe des Layouts
  • NoClassDefFoundError für Code in einer Java-Bibliothek auf Android
  • Android + NoSQL
  • Android, Webview User Agent vs Browser User Agent
  • Automatische Beantwortung des eingehenden Anrufs programmgesteuert?
  • Die NestedScrollView bekommt seine volle Größe, wenn ich die app:layout_behavior="@string/appbar_scrolling_view_behavior" entfernen app:layout_behavior="@string/appbar_scrolling_view_behavior" .

    Aber wenn ich das Layout-Verhalten zu entfernen, ist die Symbolleiste nicht kollabiert.

    Gibt es dafür? Beispiel-Layout-Datei finden Sie hier: https://github.com/Smove/cheesesquare/blob/stackoverflow/app/src/main/res/layout/activity_detail.xml

    Sie können die Cheesesquare apk aus meinem Github Zweig stackoverflow

  • Wie kann man mit Picasso OutOfMemoryError umgehen?
  • RxJava + Retrofit lange Polling
  • OnActivityResult () Absichtsdaten sind immer null
  • Beim Aufruf von TextView.setText () wird der gesamte Bildschirm trotz der Ansichtshierarchie neu gezeichnet
  • Was ist die Semantik von withValueBackReference?
  • Resource-ID kann kein leerer String sein (bei 'Text' mit Wert '?') Im TextAppearance-Attribut
  • 3 Solutions collect form web for “Android NestedScrollView hat falsche Größe nach app: layout_behavior”

    Ich hatte dieses Problem und fügte hinzu:

     android:layout_gravity="fill_vertical" 

    Zum NestedScrollView. Dann fängt es an, richtig zu benehmen, wie ich auch hier erklärt habe . Natürlich braucht das NestedScrollView irgendeine Art von Kind (dh es darf nicht leer sein), sonst wird die Symbolleiste nicht zusammenbrechen.

    Aktualisieren

    Während dies gut funktioniert mit kleinen Inhalten, bemerkte ich, es hat einige Probleme mit längeren Inhalten, zB wie die volle activity_detail.xml oben. Das Problem ist, dass man nicht in den unteren Teil des Inhalts scrollen kann – es ist nicht erreichbar am unteren Rand.

    Von meinen Tests konnte ich feststellen, dass das fehlende Teil so groß ist wie die zusammengebrochene Symbolleiste (oder zumindest das ist es, was es mir aussieht). Um dies zu beheben ist das Problem, und mit einer Lösung zuverlässig für kleine und große Inhalte, sollten Sie ein layout_marginBottom hinzufügen, um die ScrollView, so dass es gemessen wird und gibt die fehlenden unteren Teil. So:

     android:layout_gravity="fill_vertical" android:layout_marginBottom="?attr/actionBarSize" 

    Oder was auch immer du der Toolbar .

    Aber dennoch

    Das Scrollen mit kleinen Inhalten mit dieser Lösung, auch wenn der Inhalt genau an der Spitze ausgerichtet ist, ist nicht wirklich glatt wie das Scrollen mit großen Inhalten. Ich werde es benutzen, bis ein Bibliotheksregel kommt.

    Update2

    Sieht aus, wie dies in v22.2.1 behoben wurde.

    Verwenden Sie RecyclerView ersetzen NestedScrollView beheben diese Bug-Set-Element zählen 1, dass ViewHolder Ihre echte contentView zurückgeben;

    Mein Code:

      RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); // 添加分割线recyclerView.addItemDecoration(new DividerItemDecoration(getApplicationContext())); recyclerView.setAdapter(new Adapter<ViewHolder>() { @Override public int getItemCount() { return 1; } @Override public void onBindViewHolder(ViewHolder holder, int arg1) { WebView view = (WebView) holder.itemView; view.getSettings().setJavaScriptEnabled(true); view.loadUrl("http://www.baidu.com"); } @Override public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { return new ViewHolder(inflater.inflate(R.layout.webview, arg0, false)) { }; } }); 

    Umgehung

    Bevor ich mein NestedScrollView zeige und nach dem Binden der Daten an den NestedScrollView-Inhalt die Methode fullScroll (int-Richtung) meiner NestedScrollView-Instanz mit der View.FOCUS_UP-Richtung als Argument anrufe.

    Codebeispiel für ein Fragment:

    NestedScrollView scrollView = (NestedScrollView) getActivity () findViewById (R.id.scroll_view); ScrollView.fullScroll (View.FOCUS_UP);

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.