Ich benutze TabHost
innerhalb ScrollView
in meiner Aktivität, aber wenn ich Tab wählen, scrollt automatisch meine Ansicht vertikal zu Ende.Android TabHost Auto Scrollt vertikal in Side ScrollView auf TabChange?
Antwort
In diesem Fall Kind Ansicht Fokus immer zu verdanken, dass es nach oben gescrollt erhalten.
Um dies zu beheben, müssen Sie benutzerdefinierte ScrollView erstellen, die ScrollView erweitern. Code-Snipp wird so aussehen.
public class MyScrollView extends ScrollView {
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void requestChildFocus(View child, View focused) {
// if (focused instanceof TabHost) // here
return;
//super.requestChildFocus(child, focused);
// here you need to return instead of **super.requestChildFocus(child, focused);**
}
und sieht xml wie diese Antwort des
<com.views.widget.MyScrollView
android:focusable="false"
android:focusableInTouchMode="false"
android:id="@+id/root_scroll_view"
android:layout_width="match_parent"
android:fillViewport="true"
android:layout_height="wrap_content">
</com.views.widget.MyScrollView >
Dank seiner Arbeit. –
Basierend auf Er Pragati Singh ich nicht requestChildFocus(View child, View focused)
aber computeScrollDeltaToGetChildRectOnScreen(Rect rect)
hat außer Kraft setzen.
Zwingende requestChildFocus
wird auch verhindern, dass die Tastatur auf dem Bildschirm zu aktivieren, wenn ein EditText berühren, die bereits den Fokus hat, während computeScrollDeltaToGetChildRectOnScreen
nur das Delta Scroll innerhalb requestChildFocus
verwendet wird zur Berechnung der Ansicht in Sicht zu bringen. Wenn diese Funktion überschrieben wird, bleiben alle anderen Routinen intakt.
Java:
public class MyScrollView extends ScrollView {
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
// This function calculates the scroll delta to bring the focused view on screen.
// -> To prevent unsolicited scrolling to the focued view we'll just return 0 here.
//
return 0;
}
}
XML:
<YOUR.PAKAGE.NAME.MyScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
</YOUR.PAKAGE.NAME.MyScrollView>
einige Code zeigen! –