Supprimer la piste de la barre de défilement de ScrollView sous Android


104

Mon application Android a une WebView principale (HTML chargé à partir d'une ressource locale) que je souhaite utiliser sur toute la largeur de l'écran et pouvoir faire défiler (verticalement). J'ai donc encapsulé le WebView dans un ScrollView dans mon XML de mise en page, mais quoi que je fasse, je n'arrive pas à supprimer la piste de la barre de défilement du côté droit de la vue de défilement. Pire encore, je n'arrive pas à changer la couleur d'arrière-plan de la piste de la barre de défilement.

La piste occupe environ 10dp ou plus, ce qui crée des problèmes pour le HTML dans la WebView. Je voudrais que la barre de défilement apparaisse en haut de la vue Web (style iPhone, si vous voyez ce que je veux dire). Maintenant, vous pourriez dire "pourquoi ne changez-vous pas votre HTML pour qu'il soit 10px plus fin?", Qui est ma solution de secours, mais je préfère de loin ne pas avoir à le faire.

Voici l'extrait de code XML de mise en page pertinent, vous verrez que j'ai essayé tous les attributs android: etc que j'ai pu trouver:

<ScrollView 
  android:id="@+id/deal_web_view_holder"
  android:layout_below="@id/clock_bar_holder"
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"
  android:fillViewport="false"
  android:fadingEdge="none"
  android:background="#02a7e9"
  android:scrollbars="none"
  android:scrollbarSize="0dp"
  android:paddingRight="0dp"
  android:scrollbarAlwaysDrawVerticalTrack="false"
  android:scrollbarStyle="insideOverlay"
  android:scrollbarTrackVertical="@drawable/scrollbar_track_vertical" >
    <WebView
       android:id="@+id/deal_web_view"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"/>  
</ScrollView>

Je cible la plate-forme 2.1 / API lvl 7, ne traitant que des écrans de taille normale, mdp, hdp et xhdp.

Réponses:


506

Pour supprimer une barre de défilement d'une vue (et de sa sous-classe) via xml:

android:scrollbars="none"

http://developer.android.com/reference/android/view/View.html#attr_android:scrollbars


1
Ce n'est pas ce que posait l'affiche de la question. Il a dit qu'il le feraitlike the scrollbar to appear on top of the web view content
Sudhanshu

11
Cela fonctionne mais vous ne pourrez pas faire défiler l'écran lorsque le clavier est ouvert
DeltaCap019

4
android: scrollbarThumbVertical = "@ null" Ajoutez ceci sur scrollview si vous voulez que votre écran défile lorsque le clavier est ouvert :)
Biswas Khayargoli

29

essayez ceci est votre activité surCreate:

ScrollView sView = (ScrollView)findViewById(R.id.deal_web_view_holder);
// Hide the Scollbar
sView.setVerticalScrollBarEnabled(false);
sView.setHorizontalScrollBarEnabled(false);

http://developer.android.com/reference/android/view/View.html#setVerticalScrollBarEnabled%28boolean%29


Merci ... J'avais déjà essayé celui-là (dans le code et dans le layout.xml), mais cette approche interférait toujours avec la taille horizontale du WebView dans le ScrollView. La meilleure solution était celle fournie ci-dessus, supprimant simplement le ScrollView et permettant à WebView de gérer le défilement lui-même. Le problème principal était mon manque de compréhension de la façon dont il était approprié d'utiliser un ScrollView du tout; c'est-à-dire que chaque vue sous Android peut gérer le défilement.
Mick Byrne le

18

Je ne sais pas pourquoi vous mettez un WebViewdans un ScrollViewen premier lieu. A WebViewa son propre système de défilement intégré.

En ce qui concerne votre question, si vous souhaitez que le Scrollbarapparaisse en haut, vous pouvez utiliser

view.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY) or   
android:scrollbarStyle="insideOverlay"

Oui, vous avez raison de ne pas avoir besoin de ScrollView en premier lieu, j'ai travaillé moi-même avant de revenir ici. Le 'setScrollBarStyle' sur la vue Web a fonctionné un régal, merci!
Mick Byrne

Non seulement ce n'est pas nécessaire, mais un ScrollView ne peut pas contenir de vues déroulantes, donc votre WebView n'aurait pas défilé de toute façon
A Person

3
Ca ne fonctionne pas. La bonne réponse est la réponse de Garzahd.
Misagh Emamverdi

3
la bonne réponse est ci-dessous, android: scrollbars = "none"
Araib karim

5

J'ai résolu mon problème en ajoutant ceci à mon ListView:

android:scrollbars="none"

4

Ces solutions ont échoué dans mon cas avec la disposition relative et si KeyBoard est ouvert android:scrollbars="none"et android:scrollbarStyle="insideOverlay"ne fonctionne pas non plus.

la barre d'outils a disparu, mon bouton terminé a disparu.

Ca ne fonctionne pas

Celui-ci fonctionne pour moi

myScrollView.setVerticalScrollBarEnabled(false);

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.