2016-04-02 8 views
1

Siehe unten in diesem Eintrag für eine Antwort auf dieses "Problem".Fordern Sie den Fokus der Ansicht an und platzieren Sie ihn oben auf dem Bildschirm in einem ScrollView.

In meiner App blase ich einige XML-Ansichten auf und füge sie zu einer LinearLayout-Liste innerhalb einer ScrollView hinzu. Die XML sieht wie folgt aus:

<ScrollView 
     android:layout_width="0dp" 
     android:layout_weight="19" 
     android:layout_height="wrap_content" 
     android:fillViewport="true"> 
     <LinearLayout 
      android:id="@+id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
     </LinearLayout> 
</ScrollView> 

ich dann den Fokus auf eine der Ansichten zu geben, versuche ich in ‚Liste‘ gesetzt haben. Dies wird durch den Code getan:

view.getParent().requestChildFocus(view, view); 

Wenn die oben genannte Code führt zu einem nach unten scrollen, die fokussierte Sicht am unteren Rande des Bildschirms platziert bekommen und wenn es in einem Scroll-up führen, die fokussierte Sicht gelegt bekommen oben auf dem Bildschirm.

Gibt es eine Möglichkeit, die fokussierte Ansicht immer an den oberen Bildschirmrand zu bringen, wenn die Länge der Liste dies zulässt?

Edit: Das funktioniert! Siehe akzeptierte Antwort.

XML

<ScrollView 
     android:id="@+id/scroll_list" 
     android:layout_width="0dp" 
     android:layout_weight="19" 
     android:layout_height="wrap_content" 
     android:fillViewport="true"> 
     <LinearLayout 
      android:id="@+id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
     </LinearLayout> 
</ScrollView> 

Code Beispiel irgendwo in Ihrer Aktivität oder ein Fragment

view = findViewById(get_view_that_should_have_focus); 
ScrollView scrollView = findViewById(R.id.scroll_list); 
scrollView.smoothScrollTo(0, view.getTop()); 
+0

könnten Sie mehr Details geben, vielleicht Bilder von dem, was passiert? – mhdjazmati

Antwort

2

Sie können vertikale Scroll auf bestimmte Ansicht setzen diese unter Verwendung von:

scrollView.smoothScrollTo(0,view.getTop()); 

Es machen Ihre Ansicht oben auf der Bildlaufansicht (wenn genügend Höhe vorhanden ist) Nach dem Bildlauf können Sie den Fokus für diese Aussicht.