Topic List
ตอนที่เริ่มสร้าง App ใหม่ โดยใช้ Template Buttom Navigator Activity นั้นจะไม่มีปุ่มเมนูบนด้านขวาของ Action Bar หากเราต้องการใช้ ก็จำเป็นต้องสร้างขึ้นมาเอง
เริ่มด้วยการสร้าง resource file ของ options menu ก่อน
Menu -> New -> Resource File File name : options_menu Resource type : Menu
options_menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/searchFragment" android:icon="@drawable/ic_baseline_search_24" android:title="@string/action_search" app:showAsAction="always" /> <item android:id="@+id/settingsFragment" android:icon="@drawable/ic_baseline_settings_24" android:title="@string/action_settings" app:iconTint="@color/yourcolor" app:showAsAction="ifRoom" /> <item android:id="@+id/aboutUsFragment" android:icon="@drawable/ic_baseline_info_24" android:title="@string/action_aboutus" /> </menu>
MainActivity.kt
override fun onCreateOptionsMenu(menu: Menu?): Boolean { val inflater = menuInflater inflater.inflate(R.menu.options_menu, menu) if (menu is MenuBuilder) { menu.setOptionalIconsVisible(true) } return super.onCreateOptionsMenu(menu) } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.aboutUsFragment -> { toast("About Us") } } return super.onOptionsItemSelected(item) }
เพิ่มรายการในเมนู
menu?.apply { // ----------------- add a new item to menu ---------------- // add new item to menu val newItem:MenuItem = menu.add( Menu.NONE, // group id 2, // item id 1, // order "New Item" // title ) // set new item's icon newItem.setIcon(R.drawable.ic_check_circle) // set new item show as action flags newItem.setShowAsActionFlags( MenuItem.SHOW_AS_ACTION_ALWAYS or MenuItem.SHOW_AS_ACTION_WITH_TEXT ) // menu new item click listener newItem.setOnMenuItemClickListener { Toast.makeText(this@MainActivity, "New Item Clicked", Toast.LENGTH_SHORT).show() true } // ----------------- remove an item from menu ---------------- menu.removeItem(R.id.cancel) // ----------------- update an item in menu ---------------- menu.findItem(R.id.settings).apply { title = "Updated Title" }
ตรวจสอบว่า menu ได้สร้างหรือยัง?
::actionMenu.isInitialized
ตรวจสอบว่า key ของ Array มีหรือไม่?
options.has("menu")
การเข้าถึง R -> Resource
android.R.attr.actionBarSize
ที่มา
ช่วงนี้กำลังพัฒนา Green Smile App เวอร์ชั่นใหม่ โดยเปลี่ยนแปลงรูปแบบมาใช้ Fragment แทน
หลังจากทำไปพักหนึ่ง ก็มีปัญหาในการสื่อสาร/เข้าถึงข้อมูลระหว่า Activity กับ Fragment
ขอบคุณบทความดี ๆ จาก Akexorcist เรื่อง Let’s Fragment — วิธีการรับส่งข้อมูลของ Fragment แถมในบทความยังมีบทความในซีรีย์เดียวกันอีกหลายเรื่อง เช่น
- มารู้จักกับ Fragment กันเถอะ~
- เริ่มต้นง่ายๆกับ Fragment แบบพื้นฐาน
- ว่าด้วยเรื่องการสร้าง Fragment จาก Constructor ที่ถูกต้อง
- รู้จักกับ FragmentTransaction สำหรับการแสดง Fragment [ตอนที่ 1]
- รู้จักกับ FragmentTransaction สำหรับการแสดง Fragment [ตอนที่ 2]
- Lifecycle ของ Fragment (Fragment Lifecycle)
- วิธีการรับส่งข้อมูลของ Fragment
- มาทำ View Pager กันเถิดพี่น้อง~ [ตอนที่ 1]
- มาทำ View Pager กันเถิดพี่น้อง~ [ตอนที่ 2]
- เพิ่มลูกเล่นให้กับ View Pager ด้วย Page Transformer
ลองตามไปอ่านกันดูนะครับ
เลือกเมนู New Value Resource
กำหนดค่า
Local
th
ตั้งชื่อ strings_th.xml
วิธีสำเนา Android Application Source Code ไปเป็น Application ใหม่ ลองทำตามขั้นตอนดังนี้
Copy and rename a project
For some lessons, you will need to make a copy of a project before making new changes. You may also want to copy a project to use some of its code in a new project. In either case you can copy the existing project (ExistingProject), and then rename and refactor the new project's (NewProject) components to use the new project's name. (In the instructions below, substitute your actual project names for ExistingProject and NewProject.
1. Copy the project
- On your computer's file system (not in Android Studio), make a copy of the ExistingProject directory.
- Rename the copied directory to NewProject .
2. Rename and refactor the project components
The old name of the project, ExistingProject, still appears throughout the packages and files in the new copy of your project. Change the file and the package references in your app to the new name, as follows:
- Start Android Studio
- Click Open an existing Android Studio project.
- Navigate to the NewProject directory, select it, and click OK.
- Select Build > Clean Project to remove the auto-generated files.
- Click the 1:Project side-tab and choose Android from the drop-down menu to see your files in the Project view.
- Expand app > java.
- Right-click com.example.android.existingproject and choose Refactor > Rename. This opens the Rename dialog.
- Change existingproject to newproject.
- Check Search in comments and strings and Search for text occurrences and click Refactor.
- The Find Refactoring Preview pane appears, showing the code to be refactored.
- Click Do Refactor. (ปุ่ม Do Refactor อยู่ที่แถบด้านล่าง มองหาตั้งนาน เพิ่งเจอ)
- Expand res > values and double-click the strings.xml file.
- Change the name="app_name" string to New Project.
3. Update the build.gradle and AndroidManifest.xml files
Each app you create must have a unique application ID, as defined in the app's build.gradle file. Even though the above steps should have changed the build.gradle file, you should check it to make sure, and also sync the project with the gradle file:
- Expand Gradle Scripts and double-click build.gradle (Module: app).
- Under defaultConfig, check to make sure that the value of the applicationID key has been changed to "com.example.android.newproject". If it has not changed, change it manuall now.
- Click Sync Now in the top right corner of the Android Studio window.
Tip: You can also choose Tools > Android > Sync Project with Gradle File to sync your gradle files.
In addition, some apps include the app name in readable form (such as "New Project" rather than newproject) as a label in the AndroidManifest.xml file.
- Expand app > manifests and double-click AndroidManifest.xml.
- Find the statement below, and if necessary, change the label if to the string resource for the new app name:
android:label="@string/app_name"
เปิดใช้งาน ADB ผ่าน WIFI โดยไม่ต้องใช้สาย USB
$Library/Android/sdk/platform-tools/adb tcpip 5555 $Library/Android/sdk/platform-tools/adb connect 192.168.2.103:5555
อ่านรายละเอียดต่อได้ที่ Copy and rename a project
Enabling JavaScript
JavaScript is disabled in a WebView by default. You can enable it through the WebSettings attached to your WebView. You can retrieve WebSettings with getSettings(), then enable JavaScript with setJavaScriptEnabled().
WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
Binding JavaScript code to Android code
public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } }
Bind class Android
WebView webView = (WebView) findViewById(R.id.webview); webView.addJavascriptInterface(new WebAppInterface(this), "Android");
Coding in javascript
<a href="javascript:void(0)" onclick="showAndroidToast('Hello Android!')">Click for android</a> <script type="text/javascript"> function showAndroidToast(toast) { if (typeof Android=="object") Android.showToast(toast); else console.log("App not run on Android") } </script>
ที่มา Building Web Apps in WebView
ข่าวจาก Blognone เรื่องปัญหาเรื่องประสิทธิภาพของแอพบน Android เป็นปัญหาเรื้อรังของโลก Android มานาน กูเกิลจึงพยายามแก้ปัญหานี้ด้วยการเปิดคอร์สออนไลน์เพื่อสอนเทคนิคต่างๆ ซะเลย
คอร์สนี้สอนโดย Colt McAnlis ทีมนักพัฒนาของกูเกิล และเปิดให้เรียนฟรีบนเว็บไซต์ Udacity โดยเนื้อหาที่สอนครอบคลุมทั้งเรื่องการเรนเดอร์กราฟิก การจัดการหน่วยความจำ และการสร้างแอพไม่ให้กินแบตเตอรี่ ระยะเวลาการเรียนประมาณ 4 สัปดาห์ ผู้เรียนควรมีพื้นฐานการพัฒนาแอพบน Android และการใช้ Git/GitHub มาก่อน
สำหรับผู้ที่สนใจเรื่องการปรับแต่งประสิทธิภาพบน Android สามารถดูวิดีโอชุด Android Performance Patterns โดยผู้สอนคนเดียวกันประกอบได้
ที่มา - Udacity, Android Developers Blog ผ่าน Blognone
เคยอ่านหนังสือมาก 2-3 เล่มแล้ว เคยลองเขียน app แบบง่าย ๆ แล้ว แต่ก็ยังรู้สึกว่าไม่คล่อง
โจทย์ที่จะให้ทำก็เริ่มมีหลายโจทย์เข้ามา ปีนี้คงเป็นปีที่ต้องลุยเรื่อง app android อย่างจริงจัง
แต่ก่อนอื่น เริ่มต้นด้วยการ "เรียนรู้การเขียนแอพ Android สไตล์ Front-end Web Developer" ก่อนก็คงจะดี เพราะอ่านแล้วเข้าใจอะไรเพิ่มขึ้นมาอีกเยอะ ลองตามไปศึกษากันดูได้ที่ www.siamhtml.com นะครับ
เพิ่งเขียนให้ app hatyaicityclimate.org สามารถรายงานสถานการณ์ พร้อมอัพโหลดภาพได้ และรายงานระดับน้ำจากสมาชิกด้วย แต่ติดว่าเมื่อกดปุ่มเลือกไฟล์ภาพจากกล้อง ด้วย tag input type="file" จะไม่เด้งหน้าเลือกไฟล์มาให้
คำแนะนำคือให้เปลี่ยนไปใช้ WebChromeClient แทน แก้ไขตามตัวอย่าง หรือไปดูจากที่มาได้เลยครับ
เคยลองลงโปรแกรมและลองเขียน Android app มาครั้งนึง นานมากแล้ว จนกระทั่งเวลาผ่านไป โปรแกรม IDE ที่ใช้งานก็ใช้ไม่ได้ ลองลงหลายตัวแล้วก็ไม่เวิร์ค
คราวนี้กลับมาลอง Android Studio อีกรอบ
เริ่มด้วยการลง Android Studio ติดตั้งได้จาก Android Studio for Ubuntu ซึ่งเป็นการสร้าง new keystore เพื่อเอาไว้ใช้สำหรับการ build app แต่ละครั้ง และทุกครั้งก็ต้องใช้ไฟล์นี้ หากไฟล์นี้หายละก็ แย่เลย เราจะไม่สามารถ build app เพื่อส่งขึ้นไปได้ หากสร้าง keystore ใหม่ก็จะต้องเปลี่ยนชื่อ app ไปเลย ต้องรักษาไฟล์ไว้ให้ดี ๆ อย่างให้หายเชียว
sudo apt-add-repository ppa:paolorotolo/android-studio sudo apt-get update sudo apt-get install android-studio
หลังจากเขียน app เสร็จแล้วก็ต้อง build apk เพื่อส่งขึ้น Play Store ด้วย Signing Your Applications
ตอนนี้ก็ได้ลองเขียน app แรก คือ HatyaiCityClimate.Org ยังเป็น app ที่ทำเพียงแค่ไปโหลดหน้าเว็บแอพที่เขียนเตรียมไว้มาแสดง ทำแค่นั้น ส่วนเรื่องอื่น ๆ ที่คิดไว้ เช่น การรายงานสถานการณ์น้ำท่วมด้วยการถ่ายรูปพร้อมพิกัดจาก GPS และบอกเล่าสถานการณ์น้ำท่วม เพื่อเก็บรวบรวมข้อมูลเกี่ยวกับสถานการณ์น้ำท่วมมาวิเคราะห์ในภายหลัง และการทำแผนที่เสี่ยงภัย แผนที่เครือข่าย แผนที่จุดอพยพ จุดจอดรถ เส้นทางเคลื่อนย้าย การจราจร และอีกหลายไอเดีย จะค่อย ๆ ศึกษาและเขียนเพิ่มเติมในภายหลัง