안녕하세요
지금 언리얼 엔진을 통한 Webview를 띄우는 과정에서 에러가 나서
그 원인을 잘모르겠기에 이렇게 질문 올립니다.(엔진 제공 코드 인데 이렇게 에러가 나네요...)
일단 아래는 해당 Javacode 고요
여기서 GameActivity 클래스는 extends 로 NativeAcitivy 를 쓰고있습니다.
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
package com.epicgames.ue4;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.view.View;
import android.view.MotionEvent;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TableRow;
class WebViewControl
{
public WebViewControl()
{
GameActivity._activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
Log.d("Webview Control", "On WebViewControl");
webView = new WebView(GameActivity._activity);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("about:blank");
}
});
}
public void LoadURL(final String url)
{
GameActivity._activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
Log.d("Webview Control", "On LoadURL");
webView.loadUrl(url);
}
});
}
public void Update(final int x, final int y, final int width, final int height)
{
GameActivity._activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
Log.d("Webview Control", "On Update");
if (webPopup == null)
{
webPopup = new PopupWindow(GameActivity._activity);
webPopup.setWidth(width);
webPopup.setHeight(height);
webPopup.setClippingEnabled(false);
webPopup.setBackgroundDrawable((Drawable) null); // no border
webPopup.setFocusable(true); // required for keyboard
webLayout = new LinearLayout(GameActivity._activity);
webLayout.setOrientation(LinearLayout.VERTICAL);
webLayout.setPadding(0, 0, 0, 0);
MarginLayoutParams params = new MarginLayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
params.setMargins(0, 0, 0, 0);
webLayout.addView(webView, params);
webPopup.setContentView(webLayout);
webPopup.showAtLocation(GameActivity._activity.activityLayout, Gravity.NO_GRAVITY, x, y);
webPopup.update();
// allow touch outside the popup. setOutsideTouchable(false) does nothing when the popup is focusable.
WindowManager.LayoutParams p = (WindowManager.LayoutParams) webLayout.getLayoutParams();
p.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
WindowManager windowManager = GameActivity._activity.getWindowManager();
windowManager.updateViewLayout(webLayout, p);
}
else
{
webPopup.update(x, y, width, height);
}
}
});
}
public void Close()
{
GameActivity._activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
Log.d("Webview Control", "On Close");
if (webPopup != null)
{
webPopup.dismiss();
webPopup = null;
}
}
});
}
// Web Views
private PopupWindow webPopup;
private LinearLayout webLayout;
private WebView webView;
}
그리고 아래는 에러 로그
12-30 18:33:46.417: D/Webview Control(15363): On Update
12-30 18:33:46.426: D/AndroidRuntime(15363): Shutting down VM
12-30 18:33:46.437: E/AndroidRuntime(15363): FATAL EXCEPTION: main
12-30 18:33:46.437: E/AndroidRuntime(15363): Process: com.YourCompany.AndroidWebTest, PID: 15363
12-30 18:33:46.437: E/AndroidRuntime(15363): java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.view.WindowManager$LayoutParams
12-30 18:33:46.437: E/AndroidRuntime(15363): at com.epicgames.ue4.WebViewControl$3.run(WebViewControl.java:85)
12-30 18:33:46.437: E/AndroidRuntime(15363): at android.os.Handler.handleCallback(Handler.java:739)
12-30 18:33:46.437: E/AndroidRuntime(15363): at android.os.Handler.dispatchMessage(Handler.java:95)
12-30 18:33:46.437: E/AndroidRuntime(15363): at android.os.Looper.loop(Looper.java:148)
12-30 18:33:46.437: E/AndroidRuntime(15363): at android.app.ActivityThread.main(ActivityThread.java:5417)
12-30 18:33:46.437: E/AndroidRuntime(15363): at java.lang.reflect.Method.invoke(Native Method)
12-30 18:33:46.437: E/AndroidRuntime(15363): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-30 18:33:46.437: E/AndroidRuntime(15363): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-30 18:33:46.439: W/ActivityManager(783): Force finishing activity com.YourCompany.AndroidWebTest/com.epicgames.ue4.GameActivity
여기저기 뒤져봐도 이와 관련된 에러 부분은 없더라고요.
WindowManager.LayoutParams p = (WindowManager.LayoutParams) webLayout.getLayoutParams();
이 부분에서 에러가 나는건 알겠는대 그나마 비슷한 사례로 찾아보니
http://stackoverflow.com/questions/14004063/classcastexception-linearlayout-layoutparams
위 의 답변에서 부모로 FrameLayout이 상속되어있어서 그런다고 하는거 같은데 해당 GameActivity 클래스에는 FrameLayout 관련된 코드는 보이지 않고요
이와 관련된 사항 아시는분 있으면 답변 부탁드려요~