Während die Antwort von Sanf0rds korrekt ist, ist es nicht möglich, das BottomSheet standardmäßig als erweitert zu definieren. Das Problem wird dadurch verursacht, dass die WeakReference erst in der letzten Zeile von onLayoutChild festgelegt wird.
Die Lösung besteht darin, eine eigene Klasse bereitzustellen, die BottomSheetBehavior erweitert, aber den Status in einem überschriebenen onLayoutChild festlegt. Der Code ist unten angegeben.
uk/ac/QUB/quibe/misc/ExpandedBottomSheetBehavior.java
package uk.ac.qub.quibe.misc;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by mcp on 15/03/16.
*/
public class ExpandedBottomSheetBehavior<V extends View> extends android.support.design.widget.BottomSheetBehavior<V> {
public ExpandedBottomSheetBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onLayoutChild(final CoordinatorLayout parent, final V child, final int layoutDirection) {
SavedState dummySavedState = new SavedState(super.onSaveInstanceState(parent, child), STATE_EXPANDED);
super.onRestoreInstanceState(parent, child, dummySavedState);
return super.onLayoutChild(parent, child, layoutDirection);
/*
Unfortunately its not good enough to just call setState(STATE_EXPANDED); after super.onLayoutChild
The reason is that an animation plays after calling setState. This can cause some graphical issues with other layouts
Instead we need to use setInternalState, however this is a private method.
The trick is to utilise onRestoreInstance to call setInternalState immediately and indirectly
*/
}
}
In der Layoutdatei Referenzreferenz Ihre neue benutzerdefinierte Verhalten.
ändern
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
Um
app:layout_behavior="uk.ac.qub.quibe.misc.ExpandedBottomSheetBehavior"
Haben Sie 'app: layout_behavior =" @ string/bottom_sheet_behavior "' zu Ihrem LinearLayout hinzugefügt? – RafaelC
Ja, ich folgte diesem Tutorial http://www.materialdoc.com/bottom-sheets/ – Sanf0rd
fügen Sie eine NPE-Prüfung hinzu, bevor Sie die letzte Zeile anrufen – Elltz