2010-05-17 3 views
7

Dans la nouvelle application Twitter officielle, les barres de défilement de toutes les ListView utilisées par l'application sont masquées sauf si l'utilisateur fait défiler la liste. Lorsque vous commencez à défiler, les barres de défilement s'affichent. Lorsque vous arrêtez, ils disparaissent avec une animation jusqu'à ce qu'ils soient complètement disparus.Barres de défilement Autohide lorsque vous ne faites pas défiler dans un ListView

Je n'arrive pas à trouver quoi que ce soit dans la documentation qui indique qu'il s'agit d'une fonctionnalité standard.

Est-ce quelque chose inclus dans l'API? Si non, quelqu'un sait comment cela pourrait être fait?

Répondre

4

Confirmé: soit utilisez android: fadeScrollbars (si vous êtes de niveau API 5) ou essayez d'utiliser setOnScrollListener pour vérifier l'état du défilement et masquer/afficher les barres. Quelques exemples de code sont dans ce fil: how to detect Android ListView Scrolling stopped?

1

Je ne les ai pas encore utilisés, mais vous pouvez jouer avec android:scrollbarDefaultDelayBeforeFade et android:scrollbarFadeDuration, disponible sur tous les widgets (c'est-à-dire les sous-classes de View).

+0

qui pourrait fonctionner, si elle est couplée avec le niveau API setScrollbarFadingEnabled (booléenne) 5 - attribut xml est Android: fadeScrollbars –

4

Vous pouvez activer la barre de défilement fading pour votre application entière au niveau de l'API 5 et plus récent via un thème personnalisé et l'attribut de style fadeScrollbars en ajoutant ceci à styles.xml:

<style name="Theme.App" parent="android:Theme.Light"> 
    <item name="android:fadeScrollbars">true</item> 
</style> 

Réglez ensuite le nouveau thème pour votre application dans AndroidManifest.xml:

<application android:icon="@drawable/app_icon" 
      android:label="@string/app_name" 
      android:description="@string/description" 
      android:theme="@style/Theme.App"> 

juste être sûr que vous n'êtes pas primordial ce thème global sur les activités individuelles. Les versions antérieures d'Android ignorent en toute sécurité cet attribut XML inconnu et ne fondent pas les barres de défilement.

0

J'ai suivi la réponse d'Alex et cela a fonctionné en utilisant à la fois les paramètres du thème et le code.

GridView gridview = (GridView) findViewById(R.id.mygridView); 
gridview.setScrollbarFadingEnabled(false); 

J'ai toutefois rencontré un problème avec le composant Gallery. Alors que ce qui suit va bien se compiler, il va lancer une exception NullPointerException. Je suppose que c'est à voir avec une galerie n'ayant pas de barre de défilement à afficher/masquer.

Gallery gallery = (Gallery) findViewById(R.id.myGallery); 
gallery.setScrollbarFadingEnabled(false); // <-- this will throw an exception 

Android 2.2

Questions connexes