1

I exported a simple animation from Unity3D (version 4.5) in android project. With eclipse I modified the manifest and added another activity.

In this activity I put a button that it makes start the animation,and this is the result.

The action bar appear in the main activity and in unity's activity but it doesn't work in the unity's activity :(

This is a screenshot of the first activity where the action bar correctly works : enter image description here

And this is a screenshot of the second activity where the action bar doesn't work, it isn't clickable:

enter image description here
(source: tapatalk.com)

This is the unity's activity's code :

package com.rabidgremlin.tut.redcube;

import android.app.ActionBar.LayoutParams;
import android.app.NativeActivity;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;

import com.unity3d.player.UnityPlayer;

public class UnityPlayerNativeActivity extends NativeActivity
{
protected UnityPlayer mUnityPlayer;     // don't change the name of this  variable; referenced from native code

// Setup activity layout
@Override protected void onCreate (Bundle savedInstanceState)
{
    //requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    getWindow().takeSurface(null);
    
    setTheme(android.R.style.Theme_Holo_Light);
    getWindow().setFormat(PixelFormat.RGB_565);

    mUnityPlayer = new UnityPlayer(this);
    /*if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
        getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                               WindowManager.LayoutParams.FLAG_FULLSCREEN);
    */
    setContentView(mUnityPlayer);
    mUnityPlayer.requestFocus();
}

// Quit Unity
@Override protected void onDestroy ()
{
    mUnityPlayer.quit();
    super.onDestroy();
}

// Pause Unity
@Override protected void onPause()
{
    super.onPause();
    mUnityPlayer.pause();
}


// Resume Unity
@Override protected void onResume()
{
    super.onResume();
    mUnityPlayer.resume();
}

// This ensures the layout will be correct.
@Override public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    mUnityPlayer.configurationChanged(newConfig);
}

// Notify Unity of the focus change.
@Override public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
    mUnityPlayer.windowFocusChanged(hasFocus);
}
// proviamo ad abilitare l'action bar :
@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
// For some reason the multiple keyevent type is not supported by the ndk.
// Force event injection by overriding dispatchKeyEvent().
@Override public boolean dispatchKeyEvent(KeyEvent event)
{
    if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
        return mUnityPlayer.injectEvent(event);
    return super.dispatchKeyEvent(event);
}

// Pass any events not handled by (unfocused) views straight to UnityPlayer
@Override public boolean onKeyUp(int keyCode, KeyEvent event)     { return   mUnityPlayer.injectEvent(event); }
@Override public boolean onKeyDown(int keyCode, KeyEvent event)   { return mUnityPlayer.injectEvent(event); }
@Override public boolean onTouchEvent(MotionEvent event)          { return mUnityPlayer.injectEvent(event); }
/*API12*/ public boolean onGenericMotionEvent(MotionEvent event)  { return   mUnityPlayer.injectEvent(event); }
    }

And this is the manifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rabidgremlin.tut.redcube"
android:installLocation="auto"

android:versionCode="1"
android:versionName="1.0" >
<!--  android:theme="@android:style/Theme.NoTitleBar"-->
<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />

  <application
     android:icon="@drawable/app_icon"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light"  >
     
    <activity
        android:name="com.rabidgremlin.tut.redcube.UnityPlayerNativeActivity"
               android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orient        action|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"
        android:label="@string/app_name"
       
        android:screenOrientation="portrait" >
 <!--android:launchMode="singleTask"-->
        <meta-data
            android:name="unityplayer.UnityActivity"
            android:value="true" />
        <meta-data
            android:name="unityplayer.ForwardNativeEventsToDalvik"
            android:value="false" />
    </activity>
    <activity
        android:name="com.rabidgremlin.tut.redcube.MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-sdk
    android:minSdkVersion="17"
    android:targetSdkVersion="19" />

<uses-feature android:glEsVersion="0x00020000" />

</manifest>

Why isn't the action bar in unity's activity clickable ??

EDIT : I modified oncreate() in this way:

public class UnityPlayerNativeActivity extends Activity
{
protected UnityPlayer mUnityPlayer;        // don't change the name of this variable;  referenced from native code

// Setup activity layout
@Override protected void onCreate (Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getWindow().takeSurface(null);
    setTheme(android.R.style.Theme_Holo_Light);
    getWindow().setFormat(PixelFormat.RGB_565);

    mUnityPlayer = new UnityPlayer(this);
    setContentView(mUnityPlayer);
    mUnityPlayer.requestFocus();
}

And now the action bar is clickable,but I have a question : What change from extends NativeActivity to Activity ?

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
aeroxr1
  • 1,014
  • 1
  • 14
  • 36
  • Can you post your AndroidManifest.xml? – MLProgrammer-CiM Jun 09 '14 at 15:21
  • yes ! I add the AndroidManifest.xml in the first post :) It was too long for the comment's space :) – aeroxr1 Jun 09 '14 at 15:24
  • onCreate try to make setContentView your first method, then add below setTheme(android.R.style.Theme_Holo); – MLProgrammer-CiM Jun 09 '14 at 15:58
  • If that doesn't cut it, check that the UnityPlayer is not forcing fullscreen on your app. You have commented out the hook lines from what I've seen but it's worth double checking. – MLProgrammer-CiM Jun 09 '14 at 15:59
  • I don't understand very well waht did you suggest to me. (my english is very bad :/) Therefore could I insert the player in a subview and set the style and the action bar in the xml file ? I find this : http://stackoverflow.com/questions/21236094/integrate-unity3d-view-into-android-activity/24122793?noredirect=1#comment37218822_24122793 But I don't understand what I have to do :/ – aeroxr1 Jun 09 '14 at 16:15
  • Your problem is that the theme/flags are forcing the activity to be fullscreen. setContentView is a method that defines the activity's views and subviews. – MLProgrammer-CiM Jun 09 '14 at 16:25
  • I edit in this mode : protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().takeSurface(null); setTheme(android.R.style.Theme_Holo); getWindow().setFormat(PixelFormat.RGB_565); mUnityPlayer = new UnityPlayer(this); setContentView(mUnityPlayer); mUnityPlayer.requestFocus(); } But there is title bar but not the action bar :( Boh.. – aeroxr1 Jun 09 '14 at 16:33
  • The problem is that I don't know how put the player in a subview :/ – aeroxr1 Jun 09 '14 at 16:58
  • Read this: http://developer.android.com/guide/topics/ui/declaring-layout.html – MLProgrammer-CiM Jun 09 '14 at 17:11
  • After understanding that you need to put whatever typ the unityview is in one of those layouts with full package. – MLProgrammer-CiM Jun 09 '14 at 17:12
  • I edited the first post, because the problem is a bit changed, now the action bar correctly appear in the unity3d activity, but it isn't clickable :/ P.s : in this case I have to comment or can I click to "Answer Your Question" ? – aeroxr1 Jun 10 '14 at 08:21

0 Answers0