2014-08-28 95 views
1

對不起,我一直在搜索此論壇,並沒有得到確切的答案。所以我問我自己。如何顯示固定寬度和高度的Webview

我有一個類,顯示兩個佈局,glView和webview,與目標肖像屏幕640x960。我計劃拆分佈局。所以它會看起來我的背景畫在(0,0,640,480)或肖像畫面的一半。 ,並且我希望我的webview在(0,481,640,479)處繪製,它佔據從中間到底部的另一半。然而,我失敗了,無法弄清楚如何實現我想要的佈局。如何設置webView的大小&位置?

PS:如果我將佈局設置爲對齊底部,然後webview確實處於中間到底部位置,但是我需要指定確切的位置..並且最糟糕..當它加載url時,它將使用整個屏幕,覆蓋我所有的第一個佈局,我迷路了。所以如何讓webview將加載的url顯示到webview指定的寬度和高度。

謝謝..對不起我的英語不好。

反正這是我的代碼(我創建的所有編程,我沒有使用任何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 2014-08-28 14:14:29

+0

即使我使用佈局也沒關係,我只是從馬里奧zachner開始安卓遊戲電子書,使用他的框架(他不使用任何佈局)修改示例遊戲代碼。我想在這裏完成的是設置webview的位置,並手動設置其寬度和高度,也加載在該確切的大小的網址,而不是放大本身佔據整個屏幕。 – ganero 2014-08-28 14:21:31

回答

1

可以使用LinearLayout而不是RelativeLayout分割屏幕。只需設置GLSurfaceViewWebView兩者的高度= 0和權重= 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 2014-08-28 14:56:10

+0

如果在'RelativeLayout'的中心使用僞造的不可見視圖是可能的。看到我更新的答案。 – erakitin 2014-08-28 15:07:01

+0

我走在正確的軌道上,除了我現在想保持顯示或隱藏web視圖的原始目的之外,一切都有效。正如你可以看到我的'this.showWV(false);'這是調用UI線程的處理程序,我不希望webview(及其佈局)出現,代碼設置webview隱形。 之前使用您的代碼,它的工作,我的意思是我可以控制webview的可見性。但現在,它沒有工作。 webview(或空白布局)從我不想要的開始出現..我的意思是隻在特定的屏幕上顯示它時,我將處理程序味精設置爲true。 – ganero 2014-08-28 16:36:31

1

您可以使用RelativeLayout.LayoutParams類別:

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

然後將webview添加到佈局。您可以使用新的LayoutParams實例在屏幕底部找到另一個視圖,並且您可以使用一個新的LayoutParams實例和addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

+0

謝謝你,我正在嘗試它與來自erakitin的答案一起。 – ganero 2014-08-28 14:57:05

+0

@ ganero請注意,我的awnser會將視圖設置爲固定大小,因此在小於或大於640x960的屏幕上,視圖migth不會被定位/正確尺寸爲 – Gumbo 2014-08-28 15:06:07

+0

沒錯,我試過了。這就是爲什麼我需要另一種方法。謝謝 – ganero 2014-08-28 16:38:11

相關問題