2014-08-28 2 views
1

죄송합니다.이 포럼을 검색하여 정확한 답변을 얻지 못했습니다. 그래서 나는 내 자신에게 물어 본다.고정 너비와 높이로 Webview를 표시하는 방법

두 개의 레이아웃, glView 및 webview를 표시하며 대상 세로 화면이 640x960 인 클래스가 있습니다. 나는 레이아웃을 분할 할 계획이다. 그래서 (0,0,640,480) 또는 초상화 화면의 절반에 그려진 내 배경을 보일 것입니다. , 그리고 나는 내 webview (0,481,640,479)에서 그 중간에서 아래쪽에 다른 절반을 차지하고 그려. 그러나, 나는 실패하고 내가 원하는 레이아웃을 달성하는 방법을 알아낼 수 없었다. webView 크기를 설정하는 방법 & 위치?

추신 : 레이아웃을 아래쪽으로 맞추려면 webview가 실제로 중간 위치에서 아래쪽 위치에 있어야하지만 정확한 위치를 지정해야합니다. 최악 ... URL을로드하면 전체 화면, 내 모든 첫 번째 레이아웃을 덮고 나는 길을 잃었 어. 그래서 webview가 지정된 너비와 높이의 webview에로드 된 URL을 표시하도록하는 방법.

감사합니다 ... 나쁜 영어로 유감스럽게 생각합니다.

어쨌든, 이것은 내 코드 (내가 어떤 XML 레이아웃을 사용하지 않은, 프로그래밍 방식을 모두 생성)

glView = new GLSurfaceView(this); 
    glView.setRenderer(this); 
    glView.setZOrderMediaOverlay(false); 
    layout = new RelativeLayout(this); 
    layout.addView(glView); 
    webView = new WebView(this);  
    this.showWV(false); //handler message , i hide it in certain screen. 

    //webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 

    webView.loadUrl("http://stackoverflow.com"); 

    RelativeLayout.LayoutParams params = 
     new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT); 

    params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 

    layout.addView(webView, params); 

    setContentView(layout); 
+0

왜 XML 레이아웃을 사용하지 않으시겠습니까? – Gumbo

+0

레이아웃을 사용하더라도 문제가되지 않습니다. 마리오 자 쉬너 (Mario Zachner)의 안드로이드 게임 서적에서 샘플 게임 코드를 수정하는 중이었습니다.이 프레임 워크를 사용하여 (어떤 레이아웃도 사용하지 않습니다.) 내가 여기에서 달성하려고하는 것은 webview를 위치에 설정하고 너비와 높이를 수동으로 설정하고 URL을 정확한 크기로로드하고 자체를 확대하지 않고 전체 화면을 차지하는 것입니다. – ganero

답변

1

당신은 화면을 분할 LinearLayout 대신 RelativeLayout를 사용할 수 있습니다. GLSurfaceViewWebView의 height = 0 및 weight = 1을 설정하십시오.

LinearLayout layout = new LinearLayout(this); // Use LinearLayout instead of Relative 

glView = new GLSurfaceView(this); 
glView.setRenderer(this); 
glView.setZOrderMediaOverlay(false); 

// height is 0, weight is 1 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1); 
layout.addView(glView, params); 

webView = new WebView(this); 
this.showWV(false); //handler message , i hide it in certain screen. 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setLoadWithOverviewMode(true); 
webView.getSettings().setUseWideViewPort(true); 

// height is 0, weight is 1 
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1); 
layout.addView(webView, params); 

webView.loadUrl("http://stackoverflow.com"); 

setContentView(layout); 

또는 당신은 하드 높이와 너비 값 RelativeLayout을 사용할 수 있습니다 : 귀하의 경우에는 코드가 될 것입니다

RelativeLayout layout = new RelativeLayout(this); // Use LinearLayout instead of Relative 

glView = new GLSurfaceView(this); 
glView.setRenderer(this); 
glView.setZOrderMediaOverlay(false); 
glView.setId(123); // set id 

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(640, 480); 
layout.addView(glView, params); 

webView = new WebView(this); 
this.showWV(false); //handler message , i hide it in certain screen. 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setLoadWithOverviewMode(true); 
webView.getSettings().setUseWideViewPort(true); 

params = new RelativeLayout.LayoutParams(640, 480); 
params.addRule(RelativeLayout.BELOW, glView.getId()); // set WebView position is below GLSurfaceView 
layout.addView(webView, params); 

webView.loadUrl("http://stackoverflow.com"); 

setContentView(layout); 

UPD : 하드 코딩 값없이 , 눈에 보이지 않는보기 사용 :

RelativeLayout layout = new RelativeLayout(this); // Use LinearLayout instead of Relative 

// create a fake view with zero size and place it to center of RelativeLayout 
View fakeView = new View(this); 
fakeView.setId(24736); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(0, 0); 
params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 
layout.addView(fakeView, params); 

glView = new GLSurfaceView(this); 
glView.setRenderer(this); 
glView.setZOrderMediaOverlay(false); 
glView.setId(123); // set id 

params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
params.addRule(RelativeLayout.ABOVE, fakeView.getId()); // set position is above fakeView 
layout.addView(glView, params); 

webView = new WebView(this); 
this.showWV(false); //handler message , i hide it in certain screen. 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setLoadWithOverviewMode(true); 
webView.getSettings().setUseWideViewPort(true); 

params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
params.addRule(RelativeLayout.BELOW, fakeView.getId()); // set WebView position is below fakeView 
layout.addView(webView, params); 

webView.loadUrl("http://stackoverflow.com"); 

setContentView(layout); 
+0

감사합니다. 상대방 레이아웃에 충실합니다. 제가 제공 한 코드로 거의 제대로 이해할 수 있지만 유일한 문제는 하드 코딩 된 값입니다. 다른 해상도에 맞게 백분율로 변경하는 방법이 있습니다. – ganero

+0

'RelativeLayout'의 중심에서 가짜 보이지 않는 뷰를 사용하면 가능합니다. 내 업데이트 답변을 참조하십시오. – erakitin

+0

나는 옳은 길을 걷고 있습니다. 이제는 웹 뷰를 숨기거나 원래의 목적을 유지하려고 생각하고 있습니다. 당신이 볼 수 있듯이'this.showWV (false); 이것은 UI 쓰레드를 호출하는 핸들러이며 webview (그리고 그 레이아웃)가 나타나기를 원하지 않는다. 코드는 webview 보이지 않게한다. 코드를 사용하기 전에 작동 했으므로 webview 가시성을 제어 할 수 있습니다. 하지만 지금은 효과가 없습니다. webview (또는 빈 레이아웃) 내가 원하는 걸 처음부터 나타나고 .. 내가 핸들러 msg를 true로 설정하면 특정 화면에만 표시한다는 것을 의미합니다. – ganero

1

RelativeLayout.LayoutParams 클래스를 사용하여 수행 할 수 있습니다.

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(640, 480); 
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
webView.setLayoutParams(params); 

그런 다음 레이아웃에 웹보기를 추가하십시오. 새로운 LayoutParams 인스턴스를 사용하여 화면 하단에서 다른보기를 찾을 수 있습니다. addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

+0

감사합니다. 나는 erakitin의 답변과 함께 시도하고 있습니다. – ganero

+0

@ganero 내 awnser는 고정 크기로보기를 설정하므로 640x960보다 작거나 큰 화면에서는보기가 이동하지 않고 크기가 조정되지 않습니다. 바로 – Gumbo

+0

맞습니다. 시도했습니다. 그래서 다른 방법이 필요합니다. 감사 – ganero

관련 문제