March 2013
1 post
2 tags
讓android radio button 按鈕圖示置中 →
一般來說android的預設radio button樣式長這樣
資料來源:Android Developer
當然在設計時可以有很多的變形,像是不顯示文字,只顯示按鈕,或是將按鈕圖示改為自己設計的美工圖檔…有很多的變形,但是其唯一不變的就是Radio Button的對齊方式,固定為靠左對齊,所以當不顯示文字時,按鈕依舊在左邊,無法置中。
如果想要在讓按鈕置中的話,就必須改寫一下程式碼,讓radio button在繪製時可以讓button置中。
當然網路上依舊是神人不斷~已經有開發者解決了這個問題,有興趣的開發者可以連結標題參考解決方式。
January 2013
2 posts
5 tags
解決android:imeOptions="actionDone"在中文輸入法時無回應的問題
若有開發android app的愛好者們,應該會很常用到EditText這一個widget
其中有個屬性為android:imeOptions,主要用於當使用者輸入完成後,按下某一個按鍵後,觸發OnEditorActionListener事件來處理一些東西。
例如設定android:imeOptions=”actionDone”,代表按下”done”或”enter”按鍵時,會觸發。
然而就在一切都很美好的狀況下,這玩意兒在中文輸入法時(以htc的手機為例),按下“enter”鍵都無回應。看來在中文輸入法的”enter”鍵沒有對應到actionDone。
那該怎麼解決呢?
分為兩部分,一部分是xml的描述,一部分是程式碼
在layout...
5 tags
[Android]如何監控手機是否進入休眠 →
請參考標題連結的作法
比較特別要注意的一點是
監控手機是否進入休眠,不能放在 Android Manifest
需要要註冊receiver時,要加入兩個filter
Intent.ACTION_SCREEN_OFF
Intent.ACTION_SCREEN_ON
December 2012
2 posts
5 tags
[Android]讓ListView item被選擇時可以變換背景
看到標題時,一開始以為是個很簡單的問題,結果搞了我一、兩天試了n種方法,都無法解決。後來看了一些文章後,得到了一些解答,首先要明白一點,在觸碰模式下(Touch Mode)下是沒有selection state的,這是android developer blog的說明
In touch mode, there is no focus and no selection.
所以必須想一下有哪些作法,可以騙過android以達到selected的效果,想了想,可能還是要從自訂的layout來下手,果然神人vimalrajpara2006 有解答啦!就是自訂一個CheckAbleLayout來達到ListView有單選的效果,以下是我參考其原始碼修改而來
首先自訂一個CheckAbleLayout
package...
3 tags
[Android]偵測軟體鍵盤是否已經隱藏
眾所皆知,android的手機五花八門,其輸入法的型態也是一樣,像Sony的手機會有這個隱藏鍵盤的圖示,紅色框框處。
那該如何偵測鍵盤是否已經按下了隱藏鍵盤圖示呢?找了一些論譠和資源,發現並沒有提供,唯一的線索就是顯示軟體鍵盤時,整理的View的配置會有改變,看來是得從這邊下手了。
做法很簡單,只要Activity或Fragment所繫結的Root view layout動個手腳就可以了。假如App的畫面是佔滿螢幕畫面的話,可以參考下列的作法。
實作一個Custom View,假設Root view layout是RelativeLayout
/**
* Input {@link RelativeLayout}
* <p>
* 為了能夠偵測鍵盤在顯示時,被按下隱藏鍵盤圖示(EX: sony的手機, htc sensation,...
November 2012
4 posts
2 tags
在巢狀的Preference Screen模擬按下back鍵移除Preference Screen →
如果有需要透過程式碼來模擬按下back鍵來移除巢狀Preference Screen時,可以參考這個方法。
此方法主要的原則是,巢狀Preference Screen在顯示時,是以 Dialog 來顯示。以下是Android Developer的說明
When it appears inside another preference hierarchy, it is shown and serves as the gateway to another screen of preferences (either by showing another screen of preferences as a Dialog or via a startActivity(android.content.Intent) from the getIntent()). The children of...
2 tags
Microsoft Consoles Font →
最近安裝了Office 2013之後,之前寫程式喜歡用的Console字型不見了!
本來想說換別的字型來看看會不會看得順眼
最後還是覺得這個字型順用
可以點選標題去下載囉!
只限用於Windows OS
4 tags
如果移除FragmentManger裡的BackStack entry
在android版本時常的更新的現今,許多程式的寫程也開始有些轉變,之前就有提到目前官方已經開始希望開發者用fragment來取代activity。
所以在所難免常常會有在fragment之間切換來切換去,並且加入到FragmentManager的backstack,以方便按下back按鍵時,可以返回前一個fragemnt。
但是如果為了好的使用者體驗,希望在程式運作到某一個情境時,清除所有的back stack entry,讓使用者不要在按下back按鍵時,發生一些悲劇體驗的話,你可以利用程式碼來清除back stack entry
// In your FragmentActivity use getSupprotFragmentManager() to get the FragmentManager.
// Clear all back stack.
int...
4 tags
在Fragment裡建立Fragment View Pager常見的Exception →
現在Android已經開始建議大家都用Fragment來建立寫程式,主要是為了讓你的Fragment可以重複在手機或平板上一起使用,相關的說明可以參考Android Developer
而我最近在使用Fragment時,常常一個頭兩個大
如果單獨在FragmentActivity下使用Fragement View Pager沒啥問題
但是只要我在Fragment下再建立Fragment View Pager時,每次都會發生
「java.lang.IllegalStateException: Recursive entry to executePendingTransactions」
看字面上的意思,大概是遞迴不知遞到哪邊去了XDDDD
好加在有神人解決了我的疑問,主要是例用非同步的AsyncTask來解決此問題
October 2012
4 posts
3 tags
在Android裡產生無邊框(border)的dialog →
一般來說Android的Dialog都會有一個白色的邊框
會有邊框的原因主要是dialog的theme設定所致
如果要產生沒有邊框的dialog,就必須客製化theme style
實作方法請參考這裡囉!
1 tag
重構的本質 →
引用自ithome
重構的本質其實就是對軟體結構的重整,講更白一點,就是對物件給於明確的責任分派 (responsibility asssign),使得物件之間能具高內聚力 (high-cohesion)與低耦合性 (low-coupling)
2 tags
模擬PreferenceFragment在Android 3.0以下的平台 →
我必須要再一次的讚揚Stakeoverflow真的是程式設計師的好朋友呀!~
想說找一下我遇到的問題,沒想到還真的也有人也有相同的疑問
我的疑問是:「官方的Compatibility套件當中的PreferenceFragment是從3.0版本才開始支援,而compatibility的套件也無法使用PreferenceFragment,那我有什麼方法可以在3.0以下的版本,也使用PreferenceFragment呢?」
好加在有神人現身啦~可以參考來自XDA的原始碼
主要改寫的原則就是利用繼承ListFragment以及引用一些declared method來完成。
讓你可以用原來PreferenceActivity的習慣來使用。
3 tags
Vertical progress bar for android →
網路上有神人把android水平progress bar改成垂直啦~
該名作者是參考Progress bar原先使用的drawable描述檔「@android:drawable/progress_horizontal」來修改
一般來說
android的progress bar只有支援水平樣式
那如果要使用垂直樣式呢?
那就得動點手機做做drawable與style描述檔,將其改成垂直樣式
September 2012
3 posts
3 tags
Java Native Interface簡介 →
第一次與JNI見面,透過此篇文章,可能稍稍了解運作方式。
另外一些文章:
[java] Java Native Interface(JNI) 簡介與教學
Java Native Interface with C tutorial
也可以參考參考
3 tags
如何從網路下載圖片到Android的app裡
相信有不少開發者一定會需要將app與Server端結合
所以假如有需要從網路下載圖片、文件或是其他檔案到手機裡處理時
一般來說,會使用背景服務或是AsyncTask來處理,來讓app在執行時不會因為佔用UI Thread卡住或頓頓的
以下簡單列出網路上的參考資源,大家可以連過去看看,並嘗試實作一下,就可以知道運作的道理了
How to download file/image from url to your device
Download an HTTP file to SDcard with progress notification
3 tags
將Java Map的資料排序 →
一般網路上都有對於Java List的排序說介紹
那如果要針對Map排序呢?
主要精神就是
先將Map轉成List
再利用Collections.sort來排序
以下程式碼,參考自符號記憶
// 先把想排序的HashMap轉換成的entry放入List
// transcript為一HashMap
List<Map.Entry> list_Data = new ArrayList<Map.Entry>(transcript.entrySet());
// 針對Key進行排序
Collections.sort(list_Data,
new Comparator<Map.Entry>(){
public int compare(Map.Entry entry1, Map.Entry entry2){
...
August 2012
5 posts
4 tags
開啟WebView的連結時,直接開啟該網頁,而非另開新視窗 →
一開始以為是從html檔案來處理
後來發現webview可以實作web view client,並控制一些導向的行為
另外,還有更簡單的實作方式
webView.setWebViewClient(new WebViewClient() {
/*
* (non-Javadoc)
*
* @see android.webkit.WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,
* java.lang.String)
*/
@Override
public boolean...
5 tags
下載圖片至ListView,並加入Cache機制
在使用android的listview應用時
多多少少會有要在listview放入圖片
如果今天您的應用需要從網路下載圖片至listview
並且加入cache機制
可以參考此範例 - LazyList
另外也有大大把LazyList做了優化,請參考Universal Image Loader for Android
3 tags
難搞的Windows 8 中文輸入 →
Windows 8雖然好用~
但是碰到了輸入法,我快吐了~~~~
因為以往常常會在輸入文字時,用到shift鍵
但windows 8整個改得很妙~
覺得windows 8 中文輸入法不好用的~可以參考保哥的這篇文字
2 tags
AsyncTask
這是Android提供給非同步的一個好用的AsyncTask,主要是讓開發者可以不用廢心勞力的自己管理Thread與Handler的另一種變通使用方式。
AsyncTasks should ideally be used for short operations (a few seconds at the most.)
但從上文也提到,建議是使用於在幾秒就會回應的背景執行任務,最好是5秒以內,因為AsyncTask是要在UI-Thread來建立的,UI Thread若操過5秒沒有回應會產生ANR的問題。
該如何使用呢?
AsyncTask must be subclassed to be used.
可以得知AsyncTask是個抽象類別,必須被繼承來實作
AsyncTask有三個重要的 generic types,分別是給doInBackground,...
3 tags
Android Bluetooth Chat範例介紹 →
小鰻大大對Android Bluetooth Chat的範例做了不錯的中文解釋,對於想了解Android Bluetooth的運作方式,可以參考看看
July 2012
10 posts
3 tags
在Inside Ask回答問題首發 →
在Inside Ask回答問題首度回答了一篇長答案,希望有幫助到喜歡開發android app的網友們
4 tags
如何控制ListView或ExpandableListView中間的分隔線(divider)
一般而言,正常的ListView或ExpandableListView在畫面上都會有一條預設的分隔線(Divider)來區分不同列的項目,就像下圖所示,都會看到一條偏灰色的分隔線
而如果今天想要自訂分隔線的樣式的話像是不要顯示分隔線、要改變分隔線的高度、顏色…….等等等時,該怎麼做呢?android的layout描述檔提供很多相關的屬性可以設定,整理如下
和ListView相關的屬性如下
android:divider - 設定分隔線的顏色,如果要隱藏分隔線,此屬性要設定為”@null”
android:dividerHeight - 設定分隔線的高度,單位以dp為主
因為ExpandableListView是提供兩階層式的ListView,所以會有區分group, child,其相關的屬性如下
android:divider...
4 tags
Kickfolio 幫你生成 App 介紹網站的網站 →
jiwostudio:
這服務能自動幫你生成 app 網站,超級好用。
真的超級好用~~不過剛試用了一下,好像只有for iOS的app的樣子~~
5 tags
更新ViewPager裡面某一個View的內容
在stackoverflow有一篇文章的問題是”ViewPager PagerAdapter not updating the View“,在觀看這篇文章時,剛好我的app應用也有類似的問題,就是該如果更新ViewPager裡某一個View的內容,而不是全部砍掉重建。後來在欣賞外國佬的回答後,有位大大rui.araujo提出一個十分容易解決的方式,就是改寫getItemPosition()
Override getItemPosition in your PagerAdapter like this:
public int getItemPosition(Object object) { return POSITION_NONE; }
This way, when you call notifyDataSetChanged(), the view...
4 tags
為何ViewPager的PagerAdapter.notifyDataSetChanged()無作用?...
=======下列為最簡單且暫時能夠解決nofifyDataSetChanged無作用的問題,但如果view pager有很多複雜的view所組成,會有效能上的問題,請注意。=======
如果沒有用過Android ViewPager的開發者們,可以先參考官方的介紹與文件說明(雖然現在官方因為推廣Fragment更推荐使用FragmentPagerAdapter,看來又要花時間了解一下了XDD)。除了官方說明之外,我之前也有介紹一些相關文章,像是如何使用Vertical View Pager、如何取得View Pager當中的child view、如何讓ViewPager有彈回效果。
回歸正題,為何直接呼叫PagerAdapter.notifyDataSetChanged()會無作用呢?主要是因為在運作當中會呼叫到getItemPosition (Object...
3 tags
解決ListView的OnItemClickListener無法運作的方法 →
主要就是在setAdapter時,當中的getView方法當中,實作OnClickListenr並配合一些屬性的設定後,就可以運作了!
3 tags
讓TableLayout也能變出邊界(Border)出來
很久以前曾介紹過如何使用Table Layout來產生像html一樣的row span的效果,但如果要讓TableLayout有border的效果呢?很抱歉,TableLayout並沒有提供相關的屬性來使用。這部分官方參考文件說明也有提到
TableLayout containers do not display border lines for their rows, columns, or cells.
雖然TableLayout不像一般的html可以輕鬆的使用border,但可以參考官方Example說明來讓Table有具有border的效果。
5 tags
隱藏點選Preference後顯示的對話框(Dialog)的按鈕
一般來說,有些會應用Preference來製作一個Custom Preferene的登入視窗,例如下圖
(圖檔來源:ES File Explorer)
如果想要在點選Preference隱藏OK或Cancel的按鈕該怎麼做呢?之前有提過點選Preference到顯示對話框所發生的事,可以知道在點選Preference會呼叫showDialog(Bundle state),而Preference的Dialog物件,也是在此階段後,才會被設定。所以可以在Custom Preference當中Override showDialog(Bundle state),並動些手腳後,就可以讓按鈕隱藏了。而Preference所產生的Dialog其實就是一個AlertDialog,所以你可以這麼做……
@Override
protected void...
5 tags
Eclipse的TODO, XXX, FIXME註解用意 →
以往常常在程式碼亂用TODO, XXX, FIXME這三種註解,都還沒有機會去了解這三種特殊註解的意義。後來查了一下,才發現原來Eclipse的TODO, XXX, FIXME的用意是如此,又學到一課了!!
5 tags
以TortoiseSVN講解Subversion分支與合併 →
十分清楚的SVN介紹,可以讓有使用TortoiseSVN的人更得心應手
June 2012
12 posts
4 tags
在Android的WebView開啟pdf檔案 →
就目前研究的結果來看
大部分都說明android的webview無法直接開啟pdf檔案
如果要開啟pdf檔案,可以用另一種方法繞過去
利用google doc來顯示pdf檔案,但是這樣子app就要有網路連線存在,不然也打不開。
7 tags
按下Preference到顯示對話框(dialog)所發生的事
上一篇曾提到如何在按下Preference時,不要顯示dialog,這一篇就來說說按下Preference到顯示話對框到底做了什麼事,這時會發現有原始碼真好,因為攤開android原始碼,馬上一目瞭然,因為點選Preference時,會自動呼叫showDialog(Bundle state),所以就來看這一段的程式碼吧:
/**
* Shows the dialog associated with this Preference. This is normally initiated
* automatically on clicking on the preference. Call this method if you need to
* show the dialog on some other event.
*
*...
3 tags
在點選Preference時,控制是否顯示對話框(dialog)
一般來說,在使用Preference Activity時,以ListPreference為例,點選時會開啟對話框(dialog)並顯示list清單,但也有些需求是想要在點選Preference時,才透過網路api或其他方式要取得Preference的清單。此時應該會想要在取得list之後,才顯示對話框,的確也有開發者在stackoverflew問了類似的問題,後來在看了Android Develper關於Preference的說明後,找到一個showDialog(Bundle bundle)
Shows the dialog associated with this Preference. This is normally initiated automatically on clicking on the preference. Call this method if you...
3 tags
Creating ArrayList from Array in Java
以往使用ArrayList,通常都是這樣子宣告
// 宣告一個ArrayList list
ArrayList list = new ArrayList();
// 再使用add,將元素加入到list裡面
list.add("one");
list.add("two");
list.add("three");
一般有使用過陣列的java開發者應該都知道,要讓陣列加入預設元素,可以像下面這樣子寫,
// 宣告一個ArrayList list
String[] strings = { "one", "two", "three" };
但如果使用List也想要像陣列一樣在宣告list物件時,就直接加入元素的話,可以這樣子寫
// 宣告一個ArrayList list
List list = Arrays.asList("one", "two", "three");
...
4 tags
[Android] - 暫時讓app畫面不進入休眠狀態
一般來說有些app在安裝時,都會出現一個「防止手機進入待命狀態」
但是有時只是希望app在同步或是一些流程時,不想讓手機進入休眠
這時可以加入layout flag來讓app暫時不要進入待命狀態。
主要是加入此flag:FLAG_KEEP_SCREEN_ON
使用方式為在你需要暫時停止手機進入待命狀態的流程當中加入
// 此時暫時不讓手機進入待命狀態
getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
當流程執行完畢後,希望可以讓app回到自動進入待命狀態的話,此時在流程結束的地方加入
//...
5 tags
[Android] - 更新ADT後執行專案發生java.lang.VerifyError的問題
最近手癢,想說來更新一下Android開發用的ADT和SDK好了,結果悲劇發生了!!!
當我更新ADT到版本18.0.0.v201203301601-306762後,在eclipse build 和 clean 以往的android專案都沒問題,但只要一執行專案,就會發生java.lang.VerifyError的問題。
查詢了Log Cat也指出一些線索,都是指出使用第三方library的jar檔時出現了問題。一開始以為是第三方library壞了,重新下載,再匯入,仍然無法解決。
後來思考了一下,可能是ADT更新後,可能有些地方做了調整,也導致於在Build Android專案時的方式也做了調整,於是我把心思放在專案的設定(Properties),並做了調整後,專案就能正確的建置,app在執行時,也不會出現java.lang.VerifyError的問題了。
...
5 tags
CSC Studio: 關於 PhoneGap 的三大迷思 →
好文一篇,雖然這世上已經有很多種跨平台支援的開發工具,像是PhoneGap, Mobl, Titanium Studio,但在開發之前,先想想到底是native app開發比較好,還是跨平台開發比較好~此時要顧慮到的層面都要思考。就如作者說的:也是有人可以用PhoeGap開發出像native app效能一樣好的跨平台app~~
csc-studio:
最近開發平台轉移到 PhoneGap ,PhoneGap 提供將網頁包裝成跨平台APP的方案的確有它的便利性,但開發過程中還是發現了一些不實廣告的嫌疑。順手整理了一下心得,希望能對還在評估 PhoneGap 開發方案的人有些幫助。
迷思ㄧ: 只要會寫網頁就可以用 PhoneGap 開發 APP 大多人選擇 PhoneGap 是因為只會網頁開發技術 (HTML, CSS)就可以開發…
讓PopupWindow外圍不偵測touch event
最近在stackoverflow回答了一個問題,主要是解決有人需要在顯示PopupWindow還在顯示時,外圍的view元件一樣可以觸碰,而且Popupwindow不會被關閉。要解決這個問題,主要有三個屬性要設定,分別為
setTouchable();
setFocusable();
setOutsideTouchable();
其中關鍵在於setOutsideTouchable,讓我來看看官方說明
Controls whether the pop-up will be informed of touch events outside of its window. This only makes sense for pop-ups that are touchable but not focusable
...
7 tags
[Android] - 依據語系讀取多國語言html檔案至WebView
一般來說讀取html file可以從asset下手,之前也有介紹過相關的範例,如在自訂對話框中,開啟html檔案、於ICS開啟asset資料夾下的html檔案要注意的問題。
但假如要讀取多國語系的html檔案呢?因為asset是個單純的檔案資料夾,程式並不會依據所選擇的語系,切換到對應的子資料夾。如此一來不就變成每新增一個語系支援,程式碼就要修改如果是繁體中文切換到asset/zh_tw、如果是日文切換到asset/js。這樣子對於程式碼來說會變得又臭又長,又要判斷。相當費功。
所以我於是想到了android res的應用【locale】
The language is defined by a two-letter ISO 639-1 language code, optionally followed by a two letter ISO...
3 tags
[Android] - 避免String.subString造成memory leak →
主要的重點為如果使用new String(Object)來接substring,可以
讓 Java 重新建一個 char array 來放置 substring 的內容
進而避免String所存放的char array過於肥大,造成無法GC的memory leak現象
4 tags
[Android] - 檢查Internet是否正常運作 →
目前越來越多的app都會需要透過internet來進行server資料存取來進行服務的提供
那該如何來判斷目前使用者的android手機是否已經連接上了internet了呢?
不論是wifi, 3g還是LTE呢?
點選標題連結到stakeoverflow的問答可以瞭解到,要得知目前是否有Internet存在要注意下列幾點
於AndroidManifest.xml加入一user permision:android.permission.ACCESS_NETWORK_STATE。用意為
Allows applications to access information about networks 原文翻釋大致意思為:允許應用程式取得網路資訊
<?xml version="1.0" encoding="utf-8"?>
<manifest...
6 tags
[Android] - 產生Full Screen Custom Dialog →
只要透過調整theme style的屬性,就能產生一個full screen dialog
看來以後要做美美的UI,android的theme要好好學
May 2012
9 posts
6 tags
[Android] - ListView在捲動時,背景變成黑色的原因 →
最近發現若app裡面有個listview,在捲動時,就算已經設定好其他的背景圖片
在捲動時,背景卻會變成黑色,後來在程式好朋友stackoverflow,找到了解法
解法為:
android:cacheColorHint=”#00000000”// setting as a transparent color
在拜讀標題的連結文章後,大致上的理解是ListView,預設會啟用fading eage,並在捲動時,會變更background為預設的Windows background color(#191919),若要取消ListView在捲動時的效果,只要將hint coloer設定為透明色(#00000000)即可。
6 tags
[Android] - 動態調整WebView的長度與寬度 →
stackoverflow好朋友,找到一個可以動態調整WebView in Dialog的長度與寬度
使Dialog可以隨著不同手機螢幕尺寸動態調整長度與寬度
8 tags
[Android] - WebView在ICS讀取asset的html的注意事項
20120528更新:
除了asset要記住不能有s之外,另外存在asset的檔名也不能有空白
否則會造成無法讀取檔案
============================================================
我記得在很久以前有寫過一篇文章,分享如何在Dialog開啟WebView
當時還沒有ICS上市,所以沒有在ICS上測試這個範例
最近剛好手機升上了ICS就想說來玩一下以前寫的範例
發現每次開啟的dialog畫面都是
仔細看看上面的錯誤:「file:///android_assets/faq/cat/index.html」
會出現這類的錯誤,想必是路徑一定有問題
起初我也是試著google或各大程式論譠找解答。
但都是提供一些其他的方式,並沒有我想要的解答
後來在一篇Android WebView (WebKit)...
3 tags
[Android] - android:layout_weight屬性介紹
好久以前分享了一篇文章說明android:layout_weight的使用
雖然看過這篇文章,但遲遲沒機會運用
最近剛好要用到,就又回頭來好好看一下layout_weight的用途
Indicates how much of the extra space in the LinearLayout will be allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated among all views whose weight is greater than 0.
...
3 tags
[Android] - 解決存取assets檔案發生【error: Invalid...
這兩天一直有個問題困擾著我
我想想android的檔案命名就是要為[0~9a~z_]
因為專案有個需求要讀取asset當中的html檔案
但總是不能build專案,一直發生【error: Invalid filename. Unable to add.】的問題
後來一直來回搜尋、翻文件,總算找到一個解決方向
Android: Can’t include file names longer than 100 characters in Resources
看到了關鍵字:檔案長度不能超過100個字元。
在修正了檔名長度後,就能正常build好專案,並部署apk至手機當中
這只是暫時得到的解決方法,歡迎大家交流意見與分享
7 tags
[Android] - Layout套用Drawable State List
一般來說,設計android button ui時通常會搭配drawable state list,來切換button在點擊時的背圖片
但是如果想要設計比較美化的button物件時,一個方法是custom button view,另一個方式,我會選擇採用RelativeLayout設計我想要的Button樣式,裡面可能包含文字與圖片。
但問題來了,如果設計好Layout時,並且在android:background屬性最用state list的selector時,在app運作時,會發現不會隨著點擊狀態切換圖檔,此時只要在RelativeLayout的android:clickable屬性設定為true即可隨著點擊狀態切換圖檔。
歡迎大家用看看,有任何想法都可以互相討論
6 tags
[Android] - 控制ToggleButton文字對齊方式
若有使用過Android Toggle Button這個View,可以發現其預設樣式的文字會像下圖這個樣子
如果此時把Toggle Button的長度拉長,假設拉長至100dp,讓User可以更方便的點選Toggle Button,會發現文字對齊的位置偏向置中
可以發現,如果不能夠自由的調整Toggle Button的文字對齊方式,就不能夠活用ToggleBotton的UI美化。好加在寫程式的好朋友stackoverflow,有累似的文章解決了這個問題。
主要需要使用的屬性為gravity與padding這兩個屬性。如果我希望文字能夠置底,並在橫條幅的上方。可以這樣子調整
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
...