DmRomantsov's answer ist der richtige Weg, um zum 12. Knopf zu blättern. Die Methoden getLeft()
und getRight()
geben jedoch 0
zurück, da das Layout noch nicht auf dem Bildschirm angezeigt wird. Es ist zu früh, um die Breite des übergeordneten und untergeordneten Layouts zu berechnen. Um dies zu erreichen, müssen Sie innerhalb von onWindowFocusChanged
automatisch scrollen.
@Override
public void onWindowFocusChanged(boolean hasFocus){
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
// do smoothScrollTo(...);
}
}
jedoch in einem Fragment, diese Methode wird oben nicht funktionieren. Ich habe es nur geschrieben, um einen Hinweis zu geben, um das Konzept zu verstehen. Um das gleiche Verhalten in Fragment zu haben, müssen Sie nur eine Runnable
machen, die die Zeit zu Ihrer UI anzeigt. Dann tun dies mit einem LinearLayout
zu horizontal orientierten:
// Init variables
HorizontalScrollView mHS;
LinearLayout mLL;
// onCreateView method
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_container, container, false);
// Find your views
mHS = (HorizontalScrollView)view.findViewById(R.id.hscrollview);
mLL = (LinearLayout)view.findViewById(R.id.hscrollview_container);
// Do a Runnable on the inflated view
view.post(new Runnable() {
@Override
public void run() {
Log.v("","Left position of 12th child = "+mLL.getChildAt(11).getLeft());
mHS.smoothScrollTo(mLL.getChildAt(11).getLeft(), 0);
}
});
return view;
}
Mittel HorizontalScrollView:
Ihre Frage war, bis Ihr 12. Kind Autoscroll. Allerdings, in den Kommentaren unten, fragen Sie mich, um automatisch in der Mitte der HorizontalScrollView
zu scrollen, nehme ich auf jedem Gerät an. Sie müssen die Breite des Bildschirms, die Gesamtbreite des Containers berechnen und wie viele Kinder innerhalb der Gerätebreite angezeigt werden. Hier ist eine einfache Code:
// Auto scroll to the middle (regardless of the width screen)
view.post(new Runnable() {
@Override
public void run() {
// Width of the screen
DisplayMetrics metrics = getActivity().getResources()
.getDisplayMetrics();
int widthScreen = metrics.widthPixels;
Log.v("","Width screen total = " + widthScreen);
// Width of the container (LinearLayout)
int widthContainer = mLL.getWidth();
Log.v("","Width container total = " + widthContainer);
// Width of one child (Button)
int widthChild = mLL.getChildAt(0).getWidth();
Log.v("","Width child = " + widthChild);
// Nb children in screen
int nbChildInScreen = widthScreen/widthChild;
Log.v("","Width screen total/Width child = " + nbChildInScreen);
// Width total of the space outside the screen/2 (= left position)
int positionLeftWidth = (widthContainer
- (widthChild * nbChildInScreen))/2;
Log.v("","Position left to the middle = " + positionLeftWidth);
// Auto scroll to the middle
mHS.smoothScrollTo(positionLeftWidth, 0);
}
});
/**
* Your value might be resumed by:
*
* int positionLeftWidth =
* (mLL.getWidth() - (mLL.getChildAt(0).getWidth() *
* (metrics.widthPixels/mLL.getChildAt(0).getWidth())))/2;
*
**/
Mittel HorizontalScrollView mit ausgewähltem Wert:
Ich habe ein bisschen die reale Anforderung falsch verstehen. Eigentlich wollten Sie bis zu einer ausgewählten untergeordneten Ansicht automatisch blättern und diese Ansicht in der Mitte des Bildschirms anzeigen.
Dann änderte ich die letzte int
positionLeftWidth
die nun an ihre Mutter die linke Position der gewählten Ansicht relativen bezieht sie, die Anzahl von Kindern in einem Bildschirm enthalten und die halbe Breite der gewählten Ansicht.So ist der Code das gleiche wie oben, mit der Ausnahme positionLeftWidth
:
// For example the chosen value is 7
// 7th Child position left
int positionChildAt = mLL.getChildAt(6).getLeft();
// Width total of the auto-scroll (positionLeftWidth)
int positionLeftWidth = positionChildAt - // position 7th child from left less
((nbChildInScreen // (how many child contained in screen
* widthChild)/2) // multiplied by their width) divide by 2
+ (widthChild/2); // plus (the child view divide by 2)
// Auto-scroll to the 7th child
mHS.smoothScrollTo(positionLeftWidth, 0);
Dann was auch immer der Wert in getChildAt()
Verfahren, und was auch immer die Breite Bildschirm, werden Sie immer die gewählte haben (in Ihrem Fall) Taste in der Mitte des Bildschirms.
blättern möchten, können Sie uns bitte genau sagen, was falsch läuft, wenn Sie dies versuchen? –
meine zwölften Artikel sollten Autoscroll für sichtbar sein. Derzeit ist es ausblenden, ich muss es manuell scrollen. –