當你使用LWUIT的這些Component時,如果一個頁面中的布局比較復雜,組件 很多,而且頁面比較多時,常用的組件諸如 Label,Button,TextField,TextArea 等會用的非常平凡。用起這些組件時,我們常常會設置它的Style,Style很像 web裡的css,它能夠讓我們自定義 Border,Font,FgColor,BgColor,Margin,Padding,設置一個組件的 Style的代碼 很簡單:
代碼
this.getStyle().setBorder(Border border)
但是大多數的組件都有Style和selectedStyle,能夠被點擊的Button及其子 類還有pressedStyle,以上面一句為例,它僅僅只能設置這個組件未選中的時候 的Border,當選中它時,又會回到系統代碼中設定的模樣。一個頁面有很多組件 ,大多數的組件都要設置 Style(選中和未選中的Style),雖然代碼是很簡單 ,但是一個頁面寫下來,你會發現你至少一半的代碼都花在布局和設置樣式上了 ,代碼看起來非常臃腫。
好在LWUIT是開源的,我們可以修改它的源代碼來自定義這些UI的方法,找到 Component.java文件,我們只需要在這個文件中添加幾個方法來簡化我們的 Style設置。
以下是我在Component.java類中添加的一些方法,代碼我寫的比較粗糙,你 們可以按照自己的方式來寫, 理論上每個方法都應該有兩個參數,未選中和選 中的狀態,傳參時可以為null,需要進行一些判斷以適合大多數的情況。
代碼
//1469行起是添加的代碼
/**
* 設置自定義的Font
* @param font
*/
public void setCustomFont(Font font) {
this.getStyle().setFont(font);
this.getSelectedStyle().setFont(font);
}
/**
* 設置水平方向Margin
* @param margin
*/
public void setCustomHorizontalMargin(int margin) {
this.getStyle().setMargin(Component.LEFT, margin);
this.getStyle().setMargin(Component.RIGHT, margin);
this.getSelectedStyle().setMargin(Component.LEFT, margin);
this.getSelectedStyle().setMargin(Component.RIGHT, margin);
}
/**
* 設置自定義的Border
* @param border
*/
public void setCustomBorder(Border border){
this.getStyle().setBorder(border);
this.getSelectedStyle().setBorder(border);
}
/**
*設置自定義FgColor
* @param unsectedColor
* 未選中時的顏色
* @param selectedColor
* 選中時的顏色
*/
public void setCustomFgColor(int unsectedColor, int selectedColor){
this.getStyle().setFgColor(unsectedColor);
this.getSelectedStyle().setFgColor (selectedColor);
}
/**
* 設置自定義的Style
* Style包含選中和未選中的情況 ,屬性包含Margin,Padding,Border,FgColor,BgColor,Font等
* @param unselectedStyle
* @param selectedStyle
*/
public void setCustomStyle(Style unselectedStyle, Style selectedStyle){
this.setStyle(unselectedStyle);
this.setSelectedStyle(selectedStyle);
}
Button類及其子類就比較特殊,它有一個pressedStyle,我們需要對一些方 法進行重寫。
代碼
//301行起是添加的代碼
/**
* 設置自定義的Font
* @param font
*/
public void setCustomFont(Font font){
super.setCustomFont(font);
this.getPressedStyle().setFont(font);
}
/**
* 設置自定義的Border
* @param border
*/
public void setCustomBorder(Border border){
super.setCustomBorder(border);
this.getPressedStyle().setBorder(border);
}
/**
* 設置自定義FgColor
* @param unsectedColor
* 未選中時的FgColor
* @param selectedColor
* 選中時的FgColor
* @param pressedColor
* 點擊時的FgColor
*/
public void setCustomFgColor(int unsectedColor, int selectedColor,int pressedColor){
super.setCustomFgColor(unsectedColor, selectedColor);
this.getPressedStyle().setFgColor (pressedColor);
}
/**
* 設置自定義的Style
* @param unselectedStyle
* 未選中時的Style
* @param selectedStyle
* 選中時的Style
* @param pressedStyle
* 點擊時的Style
*/
public void setCustomStyle(Style unselectedStyle, Style selectedStyle, Style pressedStyle){
super.setCustomStyle(unselectedStyle, selectedStyle);
this.setPressedStyle(pressedStyle);
}
當修改完這些基本的組件類以後,我們就可以靈活的運用這些組件了。以 Button為例,在一個應用程序中會運用到很多Button,有邊框的,無邊框的,無 背景的,帶下劃線的(類似於超鏈接)等等。我們完全可以把這些樣式歸到一個 類中,那我們就寫一個類CustomButton繼承自Button。
代碼
import com.sun.lwuit.Button;
import com.sun.lwuit.Image;
/**
*
* @author Sunny Peng
*/
public class CustomButton extends Button{
/**
* 構造方法
*/
public CustomButton(){
}
/**
* 構造方法
* @param text
* 傳入文本
*/
public CustomButton(String text){
}
/**
* 構造方法
* @param text
* 文本
* @param icon
* 圖片
*/
public CustomButton(String text,Image icon){
}
/**
* 構造方法
* @param text
* 文本
* @param icon
* 圖片
* @param direction
* 方向,圖片和文本的位置,比如圖片在文 本下方,圖片在文本右邊等等。
*/
public CustomButton(String text,Image icon, int direction){
}
/**
* 無邊框按鈕
*/
public void setNoBorder(){
}
/**
* 無背景按鈕
*/
public void setNoBg(){
}
/**
* 無邊框,無背景按鈕
*/
public void setNoBorderBg(){
}
/**
* 超鏈接形式的按鈕
*/
public void setURLStyle(){
}
}
以上方法的主體大家可以自己寫,方法參數也自己定義。
我現在用的源代碼是1.3版本之前最新的(1.3版本的目前還不能夠使用), 是我反編譯LWUIT.jar後,修改了代碼中混淆產生的錯誤,使用正常,下面是 LWUIT源代碼的下載地址:
http://download.csdn.net/source/1856358