Android 导航栏后面的Mediacontroller
链接到图像示例:Android 导航栏后面的Mediacontroller,android,Android,链接到图像示例: 我试图改变重力,但它似乎不起作用,我在互联网上找不到任何东西来解决这个问题。MediaController锚定到R.id.videoView。我不知道这在其他应用程序(如play books)中是如何工作的。我最近遇到了同样的问题,我没有找到任何好方法来解决它,但解决方法是: 首先获取导航栏高度: @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusCha
我试图改变重力,但它似乎不起作用,我在互联网上找不到任何东西来解决这个问题。MediaController锚定到R.id.videoView。我不知道这在其他应用程序(如play books)中是如何工作的。我最近遇到了同样的问题,我没有找到任何好方法来解决它,但解决方法是: 首先获取导航栏高度:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
View decorView;
decorView = findViewById(R.id.videoView);
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
// | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
);}
}
然后,您可以向mediaController添加一个侦听器,类似于(mRelativeLayout是我的videoview的父级):
我希望它能帮助你
编辑:如果你的活动有一个“白色主题”,你会在切换时看到一个小的图形故障,你可能需要在这个活动的主题中添加:
@null
(或者通过编程实现)我通过设置重力和边距得到了解决方案
布局文件
mMediaController.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View view) {
((FrameLayout.LayoutParams) mRelativeLayout.getLayoutParams()).bottomMargin = mNavigationBarSize;
mRelativeLayout.requestLayout();
}
@Override
public void onViewDetachedFromWindow(View view) {
hideSystemUI();
((FrameLayout.LayoutParams) mRelativeLayout.getLayoutParams()).bottomMargin = 0;
mRelativeLayout.requestLayout();
}
});
如果需要,还可以使用以下代码处理方向更改
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_sample_video);
ColorDrawable drawable = new ColorDrawable(Color.argb(100,0,0,0));
getSupportActionBar().setBackgroundDrawable(drawable);
getSupportActionBar().setTitle("Big Bunny");
spinner = (ProgressBar)findViewById(R.id.my_spinner);
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
lpp = new FrameLayout.LayoutParams(dm.widthPixels, 170);
lpp.gravity= Gravity.BOTTOM;
lpp.setMargins(0,0,0,100);
video = (VideoView)findViewById(R.id.videoSurface);
video.setVideoPath("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
video.setMediaController(mediaController = new MediaController(this){
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
((Activity) getContext()).onBackPressed();
return true;
}
}
return super.dispatchKeyEvent(event);
}
});
hideSystemUI();
mediaController.setLayoutParams(lpp);
mediaController.setAlpha(0.5f);
video.start();
video.setOnCompletionListener(this);
video.setOnInfoListener(this);
}
谷歌有关于他们如何在这些应用程序或示例代码中实现这一点的文档吗?我也有一个相关的问题——但我使用了scrollview作为根容器,mediaController.setAnchorView(scrollview)也是如此;工作。
mMediaController.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View view) {
((FrameLayout.LayoutParams) mRelativeLayout.getLayoutParams()).bottomMargin = mNavigationBarSize;
mRelativeLayout.requestLayout();
}
@Override
public void onViewDetachedFromWindow(View view) {
hideSystemUI();
((FrameLayout.LayoutParams) mRelativeLayout.getLayoutParams()).bottomMargin = 0;
mRelativeLayout.requestLayout();
}
});
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<VideoView
android:id="@+id/videoSurface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_spinner"
android:layout_gravity="center"/>
</FrameLayout>
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_sample_video);
ColorDrawable drawable = new ColorDrawable(Color.argb(100,0,0,0));
getSupportActionBar().setBackgroundDrawable(drawable);
getSupportActionBar().setTitle("Big Bunny");
spinner = (ProgressBar)findViewById(R.id.my_spinner);
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
lpp = new FrameLayout.LayoutParams(dm.widthPixels, 170);
lpp.gravity= Gravity.BOTTOM;
lpp.setMargins(0,0,0,100);
video = (VideoView)findViewById(R.id.videoSurface);
video.setVideoPath("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
video.setMediaController(mediaController = new MediaController(this){
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
((Activity) getContext()).onBackPressed();
return true;
}
}
return super.dispatchKeyEvent(event);
}
});
hideSystemUI();
mediaController.setLayoutParams(lpp);
mediaController.setAlpha(0.5f);
video.start();
video.setOnCompletionListener(this);
video.setOnInfoListener(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
getWindowManager().getDefaultDisplay().getMetrics(dm);
lpp = new FrameLayout.LayoutParams(dm.widthPixels, 170);
//lpp.gravity= Gravity.BOTTOM;
//lpp.setMargins(0,0,0,100);
mediaController.setLayoutParams(lpp);
//Toast.makeText(getApplicationContext(),"Landscape",Toast.LENGTH_LONG).show();
}
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
getWindowManager().getDefaultDisplay().getMetrics(dm);
lpp = new FrameLayout.LayoutParams(dm.widthPixels, 170);
lpp.gravity= Gravity.BOTTOM;
lpp.setMargins(0,0,0,100);
mediaController.setLayoutParams(lpp);
//Toast.makeText(getApplicationContext(),"Portrait",Toast.LENGTH_LONG).show();
}
}