Android 将一个Activity转化为View显示出来

最近看到好多opengl牛人写了些立方体,卷页之类的华丽的代码,这些立体面上都是些图片之类的ImageView的组件,许多人问能不能将一些Activity显示到上面。
    最近我在看TabActivity的时候,发现这是可以实现的。

Java代码 
public View activityToView(Context parent,Intent intent){ 
     LocalActivityManager mLocalActivityManager = new LocalActivityManager(parent,true); 
     final Window w = mLocalActivityManager.startActivity( 
                    "TagName", intent); 
            final View wd = w != null ? w.getDecorView() : null; 
             if (wd != null) { 
                wd .setVisibility(View.VISIBLE); 
                wd .setFocusableInTouchMode(true); 
                ((ViewGroup) wd ).setDescendantFocusability( 
                        FOCUS_AFTER_DESCENDANTS); 
            } 
            return wd ; 
 



    大家知道,tabactivity既可以加载普通的layout布局文件,view组件,还有Intent(指定的activity),看下通讯录的一段代码:

Java代码 
Intent intent = new Intent("com.android.phone.action.RECENT_CALLS"); 
intent.setClass(this, RecentCallsListActivity.class); 
mTabHost.addTab(mTabHost.newTabSpec("call_log") 
        .setIndicator(getString(R.string.recentCallsIconLabel), 
                getResources().getDrawable(R.drawable.ic_tab_recent)) 
        .setContent(intent)); 

setContent()方法其实是得到一个new IntentContentStrategy(mTag, intent)的实例。
当当前的Intent的tab获得焦点的时候,TabHost会调用IntentContentStrategy的getContentView()方法,将要显示的activit转化为view显示在Tabweight的下面。
getContentView()的实现方法就类似于前面说的activityToView()方法。具体的大家可以去看TabHost的源码。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/csuhanyong/archive/2011/06/19/6554799.aspx
===================================
我在使用这个方法时遇到了一点问题
我在一个普通的activity中使用这个方法 想把另一个activity转换成view显示
但是运行出错:Activities can't be added until the containing group has been created.
后来经查找在这里解决了问题:http://topic.csdn.net/u/20110821/22/29c9a9f8-f5ae-4a3d-a2de-ae6af955e05d.html
虽然问题解决了 但是还不明白原因。。

你可能感兴趣的:(android)