Android實現邊框
京東的客戶端,在登錄頁面賬號和密碼上有邊框。自己也想加這個效果。但是發現android里并沒有border或類似的屬性。
有以下幾種解決方案。
1.嵌套一層,利用內容的margin或者padding的留白加容器的背景來實現邊框效果。
其實這個道理很簡單,很早的時候那時候我們還用table做html頁面布局的時候,我們就是使用cellspacing來實現table的邊框的。現在我們也利用同樣的想法來實現。
當然內部的容器也是需要有顏色的,如果想實現內部透明的效果則需要將內部View的背景色跟背景的顏色保持一致,這是不太方便的地方。
2圖片。
在Android中,給一個控件(或View)設置背景主要是通過background:xxx
屬性來完成。background的參數一般來說是一個drawable資源。 drawable可以是一張普通的圖片,也可以是9 patch圖片,還可以是一個xml文件。 給控件設置邊框最簡單的方式就是把background設置成你預先設計好的帶圓角和邊框的背景圖。但是這種方法的缺點是沒有靈活性,不同大小的view要不同尺寸的圖片,還要去適應不同分辨率的設備。
3使用9-patch(九宮格)的背景圖片來實現邊框效果。
做一個有邊框的9-patch圖片,作為要有邊框的View的背景圖即可。這樣你還可以控制哪邊有邊框,哪邊無邊框,這種方法是比較好的一種方法,而且沒有多余的View嵌套。另外你還可以實現圓角邊框等效果。
4利用shape來實現邊框效果。
當然你可以使用shape中的stroke來實現border的效果。
/res/drawable/filename.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="1dp" android:color="#f00" /> </shape>
只要引用這個shape作為背景圖片即可。
5.layer-list實現自由邊框
當前版本的Android SDK并沒有給stroke提供bottom、left、right之類的屬性,也就是說你無法通過它來讓長方形的邊框少于4條。于是有人想出了這個方法。
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#333"/> </shape> </item> <item android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp"> <shape android:shape="rectangle"> <solid android:color="#FFF"/> </shape> </item> </layer-list>
在第二個item中定義的top,left...就是對應的邊框,不設置即沒有邊框。
來自:http://my.oschina.net/qii/blog/222700