I am writing a component for Unity3D. I am asking this question here 
because I think it is more of an Android question than a Unity3D question.

Unity3D allows developers to write what are called Plugins. Unity has its 
own Activity that the app runs in. A plugin can interact with that activity.

The Unity activity has a ViewGroup and View in it with a canvas.

I want to add a new View into the ViewGroup of Unity. I want this new view 
to be centered on the screen and not cover up any of the existing canvas 
except for where it lives in the middle of the screen. I figure it will 
take about the full width and about 1/4 of the center of the screen.

The question is how to do this. Currently I am using a Fragment because the 
view I am trying to insert must be used as a Fragment. This Fragment shows 
up and works just fine. I can see the UI. The problem is it completely 
covers the Unity activity window.

There are a couple things to note about the code below. Thanks to other 
developers for the code to find the Unity View. I have to set the Id of the 
leaf view because it is -1 if I don't. Maybe that is part of the problem. 
Maybe I am getting the wrong view? My Fragment does show up, so....

I think I will need to use some kind of Layout and set the settings on it. 
If that is the way, please point me to the way to do that.

Again, I want my Fragment view to float on top of the Unity view and be 
centered on the screen taking of the full width, but not height.

Here is the code I have so far that shows the fragment, but covers the 
whole screen:


private View getLeafView(View view) {
if (view instanceof ViewGroup) {
ViewGroup vg = (ViewGroup)view;
for (int i = 0; i < vg.getChildCount(); ++i) {
View chview = vg.getChildAt(i);
View result = getLeafView(chview);
if (result != null) 
return result;
}
return null;
}
else {
return view;
}
}
    
public void Init(String videoId, String objectName, int heightOffset) {
 UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
 public void run() {
 ViewGroup rootView = 
(ViewGroup)UnityPlayer.currentActivity.findViewById(android.R.id.content);
        
// find the first leaf view (i.e. a view without children)
// the leaf view represents the topmost view in the view stack
View topMostView = getLeafView(rootView);
                
if (topMostView != null) {
                
// let's add a sibling to the leaf view
ViewGroup leafParent = (ViewGroup)topMostView.getParent();
    
if (leafParent != null) {
                 
leafParent.setId(0x20348);
                 
MyFragment fragment = new MyFragment();
FragmentManager fragmentManager = 
UnityPlayer.currentActivity.getFragmentManager();
FragmentTransaction fragmentTransaction = 
fragmentManager.beginTransaction();
fragmentTransaction.add(leafParent.getId(), fragment);
fragmentTransaction.commit();
}
}
}
});
}



-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to