Ich möchte die Kompatibilitäts-Aktionsleiste ausblenden/anzeigen, wenn der Benutzer in einer Listenansicht nach oben/unten blättert. Wenn die Aktionsleiste ausgeblendet wird, belegt die Liste auch den Platz der Aktionsleiste.
Ich habe einen Ansatz verfolgt, der jedoch ein hässliches Flackern erzeugt. Hat jemand eine richtige Lösung für dieses Problem? Das gewünschte Verhalten gleicht dem Ein-/Ausblenden-Mechanismus in der Google+ App (die Fußzeile interessiert mich nicht).
Was ich probiert habe, ist unten dargestellt:
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (!tabletSize) {
final ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
lvNews.setOnScrollListener(new AbsListView.OnScrollListener() {
private int mLastFirstVisibleItem;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (mLastFirstVisibleItem < firstVisibleItem) {
if (actionBar.isShowing()) {
actionBar.hide();
}
}
if (mLastFirstVisibleItem > firstVisibleItem) {
if (!actionBar.isShowing()) {
actionBar.show();
}
}
mLastFirstVisibleItem = firstVisibleItem;
}
});
}
Um das Flimmern zu vermeiden, das durch die Neueinstellung des Layouts verursacht wird, können Sie die überlagernde Eigenschaft in der Aktionsleiste verwenden.
https://developer.Android.com/training/basics/actionbar/overlaying.html
Diese Lösung bewirkt jedoch, dass die Aktionsleiste Ihre Listenansicht überlagert. Sie müssen also einen Header mit dieser Größe hinzufügen:
"?android:attr/actionBarSize"
zum Beispiel :
mVideosListView = (ListView) getActivity().findViewById(Android.R.id.list);
mVideosListView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.listview_header,null));
Seien Sie vorsichtig mit anderen Elementen wie der Navigationsleiste, die auch davon betroffen ist.
Sie müssen die Aktionsleiste über die Listenansicht legen. Auf diese Weise haben Sie die Verantwortung, die Aktionsleiste bei Bedarf zu verbergen und anzuzeigen.
Es gibt ein Beispiel auf der folgenden Seite: http://www.techrepublic.com/article/pro-tip-maximize-Android-screen-real-estate-by-showing-und-hiding-the- Aktionsleiste/
sie könnten diese Bibliothek ausprobieren. Hoffe, es hilft https://github.com/ksoichiro/Android-ObservableScrollView
Sehen Sie meine Antwort unter diesem Link: Wie kann ich die Android-Aktionsleiste wie in der Google Inbox App ein- und ausblenden? Ich benutze RecyclerView, aber die Idee ist die gleiche