android - BottomSheet opens behind VideoView -
i having hard time trying figure out happening here. first venture learning material designs spun new project , haven't gotten past first fragment.
this fragment should showing video fullscreen (as if background) elements above it. when layout inflated have bottom sheet peek appear on video should when open bottom sheet seems open sheet behind video.
not sure happening, disabled videoview element , left bottomsheet , code it. works want to. when re-enable videoview sheet opens behind video.
update: have noticed once open sheet , click around videoview login or password edittext elements take focus on out work should. seems videoview has focus default.
mainactivity.java
import android.support.v7.app.appcompatactivity; import android.os.bundle; import butterknife.butterknife; public class mainactivity extends appcompatactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); butterknife.bind(this); getsupportfragmentmanager().begintransaction().add(r.id.container, new mainfragment()).commit(); } } mainfragment.java
import android.media.mediaplayer; import android.net.uri; import android.os.bundle; import android.support.annotation.nullable; import android.support.design.widget.bottomsheetbehavior; import android.support.design.widget.coordinatorlayout; import android.support.v4.app.fragment; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.linearlayout; import android.widget.textview; import android.widget.videoview; import butterknife.bindview; import butterknife.butterknife; import butterknife.onclick; public class mainfragment extends fragment { @bindview(r.id.bgvideo) videoview bgvideo; @bindview(r.id.loginpeek) textview loginpeek; @bindview(r.id.loginsheet) linearlayout loginsheet; @bindview(r.id.llcontainer) linearlayout llcontainer; @bindview(r.id.clfragmentmain) coordinatorlayout clfragmentmain; private static final string tag = "mainfragment"; private videoview videoview = null; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { log.d(tag, "oncreateview()"); view view = inflater.inflate(r.layout.fragment_main, container, false); butterknife.bind(this, view); return view; } @override public void onviewcreated(view view, @nullable bundle savedinstancestate) { super.onviewcreated(view, savedinstancestate); renderbackgroundvideo(); } @override public void onviewstaterestored(@nullable bundle savedinstancestate) { super.onviewstaterestored(savedinstancestate); } @onclick(r.id.loginpeek) public void onclick(view aview) { log.d(tag, "onclick()"); switch (aview.getid()) { case r.id.loginpeek: if(bottomsheetbehavior.from(loginsheet).getstate() != bottomsheetbehavior.state_expanded) { bottomsheetbehavior.from(loginsheet).setstate(bottomsheetbehavior.state_expanded); llcontainer.setvisibility(view.visible); } else { bottomsheetbehavior.from(loginsheet).setstate(bottomsheetbehavior.state_collapsed); llcontainer.setvisibility(view.invisible); } break; } } void renderbackgroundvideo() { string path = "android.resource://" + getactivity().getpackagename() + "/" + r.raw.rockclimb1; log.d(tag, "renderbackgroundvideo() " + path); videoview = bgvideo; videoview.setvideouri(uri.parse(path)); videoview.setonpreparedlistener(new mediaplayer.onpreparedlistener() { @override public void onprepared(mediaplayer mp) { mp.setvolume(0, 0); mp.setlooping(true); // loop video doesnt stop if user watches int videowidth = mp.getvideowidth(); int videoheight = mp.getvideoheight(); float videoproportion = (float) videowidth / (float) videoheight; int screenwidth = getactivity().getwindowmanager().getdefaultdisplay().getwidth(); int screenheight = getactivity().getwindowmanager().getdefaultdisplay().getheight(); float screenproportion = (float) screenwidth / (float) screenheight; android.view.viewgroup.layoutparams lp = videoview.getlayoutparams(); /** * portrait: want fit video vertical * dont care left & right clipping */ if (videoproportion > screenproportion) { lp.height = screenheight; lp.width = (int) ((float) screenheight * videoproportion); } /** * landscape: opposite of vertical methodology */ // else // { // lp.width = screenwidth; // lp.height = (int) (videoproportion / (float) screenwidth); // } videoview.setlayoutparams(lp); } }); videoview.start(); } } activity_main.xml
<android.support.design.widget.coordinatorlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <framelayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.design.widget.coordinatorlayout> fragment_main.xml
<android.support.design.widget.coordinatorlayout android:id="@+id/clfragmentmain" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <videoview android:id="@+id/bgvideo" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_horizontal" /> <!-- include bottom sheet --> <include layout="@layout/login_bottom_sheet" /> </android.support.design.widget.coordinatorlayout> login_bottom_sheet.xml
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/loginsheet" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/coloraccent" android:orientation="vertical" android:alpha="0.8" app:behavior_hideable="false" app:behavior_peekheight="80dp" app:layout_behavior="android.support.design.widget.bottomsheetbehavior"> <textview android:id="@+id/loginpeek" android:layout_width="match_parent" android:layout_height="80dp" android:background="@color/coloraccent" android:gravity="center" android:text="@string/login_peek" android:textcolor="@android:color/white" /> <linearlayout android:id="@+id/llcontainer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical|center_horizontal" android:gravity="center" android:orientation="vertical" android:background="@color/coloraccent" android:visibility="invisible" tools:ignore="hardcodedtext"> <edittext android:id="@+id/edtusername" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_marginright="10dp" android:gravity="center|left" android:hint="@string/lbl_user_name" android:inputtype="textemailaddress" android:text="testing@testing.com" android:textcolor="@color/primarytextcolor" tools:alpha="0"/> <edittext android:id="@+id/edtpass" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_marginright="10dp" android:gravity="center|left" android:hint="@string/lbl_user_password" android:inputtype="textpassword" android:text="testing" android:textcolor="@color/primarytextcolor" tools:alpha="0"/> <button android:id="@+id/btnlogin" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginbottom="10dp" android:layout_marginleft="10dp" android:layout_marginright="10dp" android:layout_margintop="@dimen/spacing_standard" android:background="@drawable/button_selector" android:clickable="true" android:paddingbottom="@dimen/spacing_standard" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/spacing_standard" android:text="@string/login" android:textcolor="@color/primary_button_text_color"/> </linearlayout> </linearlayout>
Comments
Post a Comment