2017年3月22日 星期三

Widgets

Widgets


Widgets:小工具。


Widget - XML file


        要新建一個XML file名稱為mywidget,裡面要加入AppWidgetProvider。

  例如:
     <appwidget-provider 
 xmlns:android="http://schemas.android.com/apk/res/android" 
   android:minWidth="146dp" 
   android:updatePeriodMillis="0" 
   android:minHeight="146dp" 
   android:initialLayout="@layout/activity_main">
</appwidget-provider>


Widget - Layout file


        把元件抓到Layout裡面。

Widget - Java file


    定義Layout之後,在Java file 需要AppWidgetProvider類別。
    更新方法,需要PendingIntent 和 RemoteViews 類別。

 例如:

PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
//getActivity()第1個參數是目前應用程式的Context,就是目前應用程式的狀態。第2個參數目前保留不使用。第3個參數即是提供給外部應用程式用來啟動Activity的Intent實體。

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);
// 得到RemoteViews,用來控制及設定App Widget的控件,如按鈕等。



       最後還需要AppWidgetManager 類別裡面的更新方法updateAppWidget()  

 例如:
 appWidgetManager.updateAppWidget(currentWidgetId,views);


 Widget其他方法

 onDeleted(Context context, int[] appWidgetIds):當APPWidget被刪除,呼叫此方法。

 onDisabled(Context context)當最後APPWidget被禁用,呼叫此方法。

 onEnabled(Context context) APPWidget被建立,呼叫此方法。

       onReceive(Context context, Intent intent)
    
      

Widget - Manifest file


  記得在Androidmanifest.xml 增加

 <intent-filter>
  <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>


     <meta-data android:name="android.appwidget.provider"
      android:resource="@xml/example_appwidget_info" />



參考文獻


Android - Widgets

Android小工具教程

Android Widget Example

Android Widget 開發流程

Android Widget 範例

Android程式設計 (十三) 使用Notification

PendingIntent實現原理和代碼

android基礎知識31:PendingIntent

Android的小工具(App Widget)(RemoteViews)

[Android] RemoteView & AppWidget機制介紹

Jollen 的 Android 教學,#25: HelloAppWidgetProvider.java 程式碼說明



Wi-Fi

Wi-Fi


Wi-Fi :無線網路。


     android 提供WifiManager API 來管理Wi-Fi 連線, 還需要getSystemService方法。


  WifiManager mainWifiObj;

mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);




   為了掃描無線網路列表,需要註冊BroadcastReceiver,再利用registerReceiver取回Wi-Fi。


 class WifiScanReceiver extends BroadcastReceiver {
   public void onReceive(Context c, Intent intent) {
   }
}

 WifiScanReceiver wifiReciever = new WifiScanReceiver();

 registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

  




    Wi-Fi掃描器掃描到可以連到的Wi-Fi,startScan開啟。此方法是來取得ScanResult 列表。可以用get方法取得。


 List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
String data = wifiScanList.get(0).toString(); 
   
    get(0)--->取得第一個找到的Wi-Fi




  WifiManager可以定義的方法


    addNetwork(WifiConfiguration config):通過獲取到的網的連接狀態信息,來增加網路

 createWifiLock(String tag):建立新的WifiLock(Wifi鎖)

    disconnect():取消連線。

 enableNetwork(int netId, boolean disableOthers):允許之前連接的網路。

     getWifiState():取得Wifi啟用狀態。

     isWifiEnabled():判斷是否啟動Wifi。

   setWifiEnabled(boolean enabled):設定啟動或禁用Wifi。

     updateNetwork(WifiConfiguration config)
       更新網路的訊息。

記得在AndroidManifest.xml 加入

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />



 參考文獻

Android - Wi-Fi
https://www.tutorialspoint.com/android/android_wi_fi.htm

Android無線網絡教程
http://www.w3ii.com/zh-TW/android/android_wi_fi.html

android WIFI連接開發
http://fecbob.pixnet.net/blog/post/39248623-android-wifi%E9%80%A3%E6%8E%A5%E9%96%8B%E7%99%BC

android連接wifi相關知識
https://read01.com/2dAx4.html

Android Wi-Fi基本操作
https://read01.com/dO8O7.html

WakeLock使用方法示例代碼
http://fecbob.pixnet.net/blog/post/35499474-wakelock%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A2%BC

【Android學習筆記】WIFI控制(開啟、關閉)
https://ryanisagoodguy.blogspot.tw/2016/03/androidwifi.html

Android開發——自動連接指定SSID的wifi熱點(不加密/加密)
http://fanli7.net/a/JAVAbiancheng/JAVAzonghe/20121025/242371.html

201105312000Android - 取得WIFI相關資訊
http://blog.xuite.net/mp600.fh/skill/46032828-Android+-+%E5%8F%96%E5%BE%97WIFI%E7%9B%B8%E9%97%9C%E8%B3%87%E8%A8%8A

Android-WiFi-Connection-Demo-Code-Sample
https://github.com/theappguruz/Android-WiFi-Connection-Demo-Code-Sample

Scan wifi for connections or Get number of available wifi connections
http://androidexample.com/Scan_wifi_connections_or_Get_number_of_available_wifi_connections/index.php?view=article_discription&aid=90

Android - WiFi Connection Demo
http://www.theappguruz.com/blog/android-wifi-connection-demo



2017年3月21日 星期二

WebView

WebView


WebView(網路視圖):使用者可以顯示網頁在你的APP,也可以指定HTML 顯示網頁在你的APP上。



       為了要使用WebView,要在java檔案中加入

     WebView browser = (WebView) findViewById(R.id.webview);

    
      

       WebView加入到java檔案中之後,下載網址到WebView,需要呼叫loadUrl(String url)在WebView裡面。

         browser.loadUrl("http://www.tutorialspoint.com");



  WebView 其他類別

      setLoadsImagesAutomatically:支援自動加載圖片。

     setScrollBarStyle:設定ScrollBar的樣式

      canGoBack(boolean):判斷是否回上一頁。

      canGoForward(boolean)判斷是否跳下一頁。

      clearHistory():清除WebView向前和之後的歷史訊息。

      destroy():摧毀WebView的內部狀態。

     findAllAsync(String find)

       getProgress():取得目前頁面的進度。

     getTitle(string)取得目前頁面的標題。


     getUrl(string)取得目前頁面的Url。

     



      WebViewClient主要幫助WebView產生另一個新的WebView暫時蓋住原先的WebView



private class MyBrowser extends WebViewClient {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
      view.loadUrl(url);
      return true;
   }
}

 shouldOverrideUrlLoading:判斷自定瀏覽器是否開啟連結 。

參考文獻

Android - WebView

Android的WebView教程


Android-筆記 WebView 覆寫 WebViewClient

[Android] 學習筆記:取得 WebView 目前的 URL

[Android] WebView自定義網頁上下頁按鈕

WebView

Android之WebViewClient與WebChromeClient的區別(Android的WebView 兩個都要用才可以完整使用全部功能)

以WebViewClient於Android開啟網頁,並以AlertDialog提示載入狀態

Android - App 內嵌 WebView ,不另跳Browser


UI Patterns

UI Patterns


UI Patterns:UI 模式。


UI Patterns components


    好的android 應用程式會遵循下面的UI Patterns。

      Action Bar
      Confirming and Acknowledging
      Settings
      Help
      Selection


Action Bar(操作欄)


       動作要簡單名顯易懂

     在不同APP之間支援一致導航列和 畫面轉換

    Reduces clutter by providing an action overflow for rarely used actions

    APP要有空間放識別名稱。
   

Action Bar Components


        App Icon:可以放logo或是品牌來代表APP。

       View control提供下來是選單,可以選擇不一樣的檔案或圖片。

       Action buttons可以讓使用者點選的動作。例如:搜尋。

       Action overflow海苔條Action buttons太多了,就會隱藏Action overflow裡面。使用者點選來會展開。





Confirming and Acknowledging


      當使用者要點選一個動作,就用確認和承認(Confirming and Acknowledging)出現簡短訊息或對方方塊,來提醒使用者。


     Confirming:當使用者要做一個動作,出現的對方方塊,讓使用者點選


          
      Acknowledging系統所回覆訊息給使用者看。
  



  Settings:使用者可以依自己喜歡的樣式做設定。


    

    Placement of Settings

         可以在右上方Action overflow或是左上方
Menu key(三條長線),可以找到Settings


   

  Help:當使用者使用APP遇到困難,可以查Help

,解決困難。

  

      Placement of Help

       可以在右上方Action overflow或是左上方
Menu key(三條長線),可以找到Help。



Selection


    Android 3.0 version 之後,將長按手勢用來選取資料,把它放入Using Contextual Action Bar (CAB)。

Using Contextual Action Bar (CAB)

       選擇CAB是在選取資料之後,蓋掉您的APP的目前Action Bar




參考文獻



Android - UI Patterns

Android UI模式教程

5.ActionBar

【菜逼八學Android】標題功能表─ActionBar(1)

android - actionBar中的Overflow Menu(海苔條)出現的時機

使用 Android ActionBarCompat 製作導覽列 (1)

今天介紹Confirming & Acknowledging

選單鍵

Contextual Action Bar (CAB) in Android

[Android]關於ANDROID 4.X 多選的行為討論(CAB)

Android設計和開發系列第二篇:Action Bar(Design)


2017年3月20日 星期一

UI Design

 UI Design




 UI Design:使用者介面設計。



UI screen components

       
  • Main Action Bar(主操作欄)

  • View Control(圖片控制)

  • Content Area(內容區) 

  • Split Action Bar


Understanding Screen Components



  View and ViewGroups   


       View只是螢幕上的小元件。

     ViewGroups  很多螢幕上的小元件組成。
       

   
  Types of layout

        Linear Layout(線性布局)

       Absolute Layout(絕對布局)

      Table Layout(表格布局)

      Frame Layout(框架布局)

      Relative Layout(相對布局)



views and ViewGroups 的其他屬性

  layout_width指定View 或 ViewGroups的寬度。

  layout_height指定View 或 ViewGroups的高度。

   layout_marginTop 指定View 或 ViewGroups的上邊沿的間隔。

  layout_marginBottom 指定View 或 ViewGroups的底邊沿的間隔。

  layout_marginLeft指定View 或 ViewGroups的左邊沿的間隔。

  layout_marginRight 指定View 或 ViewGroups的右邊沿的間隔。

  layout_gravity項目在畫面上的位置。比如一個button linearlayout裡,你想把該button放在linearlayout裡靠左、靠右等位置就可以通過該屬性設置。

   layout_weight指定View 或 ViewGroups的大小以百分比顯示

    

Units of Measurement


      dpDensity-independent pixel。 1 DP相當於一個像素的160 dpi的屏幕上。

   spScale-independent pixel。

   ptPoint

   pxPixel。像素。

Screen Densities


    Low density (ldpi):120 dpi

   Medium density (mdpi)160 dpi

   High density (hdpi)240 dpi

   Extra High density (xhdpi)360 dpi


Optimizing layouts(優化layout)


        避免不必要的嵌套。

      避免使用太多圖片。

       避免深層嵌套。


參考文獻


Android - UI Design


Android UI設計教程

[Android] layout_weight的妙用-讓View的大小以百分比率顯示(proportionate size)

Android 利用 layout_weight 屬性來設定物件的版面所佔比例 (權重) (平均分配)

Android 的 pixel 與 dp

[Android]長度單位詳解(dp、sp、px、in、pt、mm)

Android解析度適配