2016年4月11日 星期一

[Android] 使用WebView讀取網頁時,表格無法完整顯示的簡易替代方案

一開始是想用WebView讀取特定網頁,讓使用者可以方便,不用離開app到browser開啟
但採用後發現WebView讀取該網頁是以完整顯示上半段文章為基準,下半段表格則超出頁面橫向範圍,用手勢也無法移動。

這現象跟網站本身的寫法和相容性有關,同時,WebView也只是最簡單基本讀取網頁用的元件,不然就不需要辛苦開發browser了。

在不能改動網站前後端的前提下,研究了許多方式都不能移動畫面,後來看Android下大多瀏覽器也無法正確瀏覽,iPhone下Safari跟Chrome則可以顯示(看來跟元件底層及API也有點關係@@)。忘記是哪款瀏覽器版本可以完整顯示表格,雖然背景不會同步拉寬,但至少可以完整顯示內容,且Android下也只找到這個方式可以正確顯示,就朝此方向追尋。

但找了幾個方法都無法改善,其他大部分的畫面問題應可以用頭兩行解掉:


   webView.getSettings().setLoadWithOverviewMode(true);
   webView.getSettings().setUseWideViewPort(true);
   webView.getSettings().setBuiltInZoomControls(true);


隔了好一陣子一度放棄,最後發現有人加了setInitialScale(1)這行,配合setLoadWithOverviewMode(true),setUseWideViewPort(true),
總算可以讓表格固定完整顯示。

   webView.setWebViewClient(new webClient());
   webView.setInitialScale(1);
   webView.getSettings().setJavaScriptEnabled(true);
   webView.getSettings().setLoadWithOverviewMode(true);
   webView.getSettings().setUseWideViewPort(true);
   webView.loadUrl(uri);

後記:
回頭拿Android Nexus 5x 6.0跟iPhone 6s 9.3.1比較,
Android下: Chrome v49.0, Opera v36.1, FireFox v45.0.1, Dolphin v11.5.5, Boat Browser v8.7.3,只有Dolphin做了表格完整顯示(Scale固定,背景維持框架原始大小),Chrome則是可以有技巧的左右滑一下但回不來...,其他都是表格無法完整瀏覽或移動。
iPhone下(沒看瀏覽器版本):Chrome, 
Safari,Opera,Dolphin各瀏覽器都是單純用手勢左右移動就可以瀏覽表格(背景維持框架原始大小)

2016年1月10日 星期日

[Android] GridView與GridLayout使用上的差異

GridView:
如果你手邊有一批圖像或data, 需要將他們放進格子狀的畫面呈現, 甚至在滑動頁面時需要刷新裡面的圖像/data, Ex:相簿的九宮格(thumbnails), 可以使用GridView. 它可以幫你做到重複使用及回收這些格位, 提升使用上的效能.
GridView是透過Adapter轉接器, 類似ListView的作法, 將手邊的資料們根據index, 指定至這些一格一格的位置. 當然, 你也可以定義一格裡面的內容, 同時包含圖像或文字, 做成一個複合的Item, 提供給Adapter來介接.

GridLayout:
適用於畫面的佈局配置, 類似LinearLayout. 可針對Android元件做不同比重分配,  Ex:計算機按鈕. 下方為google blog提出的兩個範例.

GridLayout範例

[Android] 新project出現android.support.v7.internal.app.WindowDecorActionBar錯誤

此時Android Studio會提示你修正重新Build project, 但路徑不對的話, 仍然會出現錯誤




解決方式style可以替換使用
(1) NoActionBar,
(2) 以Base.Theme.AppCompat.Light.DarkActionBar取代Theme.AppCompat.Light.DarkActionBar





原因是style內使用到Android 5.0 (SDK 21)以前的Android ActionBar style.

AppTheme繼承自Theme.AppCompat.Light.DarkActionBar style

AndroidManifest.xml於Application style使用AppTheme

而ActionBar於已經被ToolBar取代, 使用ToolBar通常styles樣式會設為NoActionBar, 並在需要放置的layout內定義ToolBar 元件

Android 5.0 style (v21)
NoActionBar
定義ToolBar元件

[Android] Fragment 及 v4 support Fragment差異

1. android.app.Fragment - 支援Android 3.0 (API 11)以上版本
2. android.support.v4.app.Fragment - 如需支援Android 3.0以前再使用


android.app.Fragment:
(1)使用FragmentManager操作Fragment時, 必需使用 getFragmentManager()取得android.app.FragmentManager

android.support.v4.app.Fragment:
(1)裝載的Activity必須extends FragmentActivity,
(2)使用FragmentManager操作Fragment時, 必需使用 getSupportFragmentManager()取得android.support.v4.FragmentManager