你的位置:首页 > 软件开发 > 操作系统 > Presentation与自定义Dialog的使用

Presentation与自定义Dialog的使用

发布时间:2016-06-30 18:00:02
本文为原创文章,转载请注明出处。文章最后附带DEMO,请需要的朋友下载。 从API 17开始,Android提供了Presentation类,为多屏异显开发提供了官方支持,当然最终需求的实现也需要底层硬件及驱动的支持。基本需求:控制辅屏全屏显示与主显不同的内容,且当主显全屏显 ...

Presentation与自定义Dialog的使用

本文为原创文章,转载请注明出处。

文章最后附带DEMO,请需要的朋友下载。 

从API 17开始,Android提供了Presentation类,为多屏异显开发提供了官方支持,当然最终需求的实现也需要底层硬件及驱动的支持。

基本需求:控制辅屏全屏显示与主显不同的内容,且当主显全屏显示的内容变化后对辅屏显示内容的延续性(例如辅屏视频播放)不产生影响。

本文主要内容有以下几点:

(1)Presentation的基本用法;

(2)自定义Dialog的使用(全屏);

(3)采用自定义Dialog对话框方式代替Activity间的切换,防止因Activity进入Paused状态导致Presentation不再显示或显示内容不持续的情况,例如想让辅屏连续播放视频,如果采用Activity切换方式,在Activity切换后新的Activity控制的Presentation很难延续上一个Presentation的视频播放位置且用户体验不好。

Presentation的高级用法比如硬件状态改变事件监听等,请参考官方API或其他文章。

通常,使用Presentation有几个要点:

(1)生命周期,Android API官方文档有段原话"A presentation is automatically canceled (see cancel()) when the display to which it is attached is removed. An activity should take care of pausing and resuming whatever content is playing within the presentation whenever the activity itself is paused or resumed.",意思是当与presentation 绑定的Display被移除或Activitiey进入pauseed、resuming状态时必须由我们自己控制Presentation的生命周期即Activity不在主显显示时由其创建的Presentation也将消失。

(2)获得Display,每个Presentation必须指定单独的Display用于与主屏幕不同内容的展现。

(3)设置ContentView,与Activity一样,Presentation也可以通过setContentView方法设置Presentation展现的

说明:为了便于代码重构和逻辑分离,自定义的Presentation和Dialog均定义成单独的类,如果功能很简单也可以定义成内部类。

一、自定义Presentation显示

通常获得Presentation显示需要的Display有两种方法,MediaRouter 和DisplayManager ,本文将采用DisplayManage获取Display的方式。

(1)创建布局文件presentation_content.

Presentation与自定义Dialog的使用

(2)创建XiaoshubaoPresentation.java类文件:

Presentation与自定义Dialog的使用Presentation与自定义Dialog的使用
 1 package xiaoshubao.presentationdemo; 2  3 import android.app.Presentation; 4 import android.content.Context; 5 import android.os.Bundle; 6 import android.view.Display; 7 import android.widget.TextView; 8  9 /**10  * 作者:xiaoshubao11  * 时间:2016/06/3012  * 版本: V1.013  * 说明:14 */15 public class XiaoshubaoPresentation extends Presentation {16   private Display mdisplay;17   public XiaoshubaoPresentation(Context context, Display display) {18     super(context, display);19     this.mdisplay = display;20   }21 22 23   @Override24   protected void onStart() {25     super.onStart();26     MessageUtils.showInfo("MyPresentation....onStart");27   }28 29   @Override30   protected void onStop() {31     super.onStop();32     MessageUtils.showInfo("MyPresentation....onStop");33   }34 35   @Override36   public void show() {37     super.show();38     MessageUtils.showInfo("MyPresentation....show");39   }40 41   @Override42   public void hide() {43     super.hide();44     MessageUtils.showInfo("MyPresentation....hide");45   }46 47   @Override48   public void dismiss() {49     super.dismiss();50     MessageUtils.showInfo("MyPresentation....dismiss");51   }52 53   @Override54   protected void onCreate(Bundle savedInstanceState) {55     super.onCreate(savedInstanceState);56     setContentView(R.layout.presentation_content);57     initData();58     MessageUtils.showInfo("MyPresentation....savedInstanceState");59   }60 61   private void initData() {62     TextView mPresentationId = (TextView) findViewById(R.id.presentationIdTextView);63     mPresentationId.setText("" + mdisplay.getDisplayId());64   }65 }

 (5)释放Presentation资源

 presentation.dismiss();

、自定义Dialog显示

大致思路:定义Style控制Dialog全屏显示->定义Dialog

(1)定义Dialog全屏显示的Style

Presentation与自定义Dialog的使用Presentation与自定义Dialog的使用
1   <style name="XiaoshubaoDialogStyle">2     <item name="android:windowNoTitle">true</item>3     <item name="android:windowFullscreen">true</item>4   </style>

原标题:Presentation与自定义Dialog的使用

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录