【J2ME】KUIX框架——添加自定义的属性

<listitem>
	<picture style="align:top;padding:5 0 0 0">${img}</picture>
	<textarea id="listitem_text" style="subwidth:50;align:fill-left;padding:3 0 3 0;center;font-size:large;font-style:bold;color:#060606">${text}</textarea>
</listitem>  


 

以上是我用到的KUIX里的一个布局XML文件,

textarea控件本身是没有subwidth这个style属性的,subwidth是我强奸进去的。

 

看步骤,注意关注//add by Denger注释:

1.在KuixConstants类里添加属性名称:

    public static final String ON_CHANGE_ATTRIBUTE = "onchange";
    public static final String ON_SELECT_ATTRIBUTE = "onselect";
    public static final String ON_UNSELECT_ATTRIBUTE = "onunselect";
    /
    //add by Denger
    public static final String TEXT_SUB_WIDTH = "subwidth";
    /
    // Style properties
    public static final String COLOR_STYLE_PROPERTY = "color";
    public static final String FONT_FACE_STYLE_PROPERTY = "font-face";
    public static final String FONT_STYLE_STYLE_PROPERTY = "font-style";

上面的public static final String TEXT_SUB_WIDTH = "subwidth";即定义新的Style属性,这里定义的要与你在XML里将使用的一致。


2.修改Widget类,在protected Object getDefaultStylePropertyValue(String name)方法里添加subwidth的默认值,如下:

 

protected Object getDefaultStylePropertyValue(String name) {
		if (KuixConstants.LAYOUT_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_LAYOUT;
		}
		if (KuixConstants.MARGIN_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_MARGIN;
		}
		if (KuixConstants.BORDER_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_BORDER;
		}
		if (KuixConstants.PADDING_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_PADDING;
		}
		if (KuixConstants.MIN_SIZE_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_MIN_SIZE;
		}
		if (KuixConstants.GAP_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_GAP;
		}
		if (KuixConstants.SPAN_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_SPAN;
		}
		if (KuixConstants.WEIGHT_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_WEIGHT;
		}
		if (KuixConstants.ALIGN_STYLE_PROPERTY.equals(name)) {
			return DEFAULT_ALIGN;
		}
		if (KuixConstants.COLOR_STYLE_PROPERTY.equals(name)) {
			return Color.BLACK;
		}
		//add by Denger
		if (KuixConstants.TEXT_SUB_WIDTH.equals(name)) {
			return "5";
		}
		return null;
	}

其中,if (KuixConstants.TEXT_SUB_WIDTH.equals(name)) {return "5";}是我添加的代码。

我让它默认为5。

 

3.修改KuixConverter类,在public Object convertStyleProperty(String name, String rawData) throws IllegalArgumentException方法里添加代码,

如果少了这步会报Unknow style name XXX的异常,我就卡在这里浪费了快半小时时间:

 

	public Object convertStyleProperty(String name, String rawData) throws IllegalArgumentException {
		
		略......		
		// Transition
		if (KuixConstants.TRANSITION_STYLE_PROPERTY.equals(name)) {
			return convertTransition(rawData);
		}
		
		//add by Denger
		if (KuixConstants.TEXT_SUB_WIDTH.equals(name)) {
			return rawData;
		}
		
		throw new IllegalArgumentException("Unknow style name " + name);
	}


至此,就可以在TextAren类或者它的父类TextWidget里取出subwidth属性并且何由你怎么搞啦,

我是这么搞的:

public abstract class TextWidget extends FocusableWidget {

	// The default Font value
	private Integer defaultFontFace = null;
	private Integer defaultFontStyle = null;
	private Integer defaultFontSize = null;

	// Text value
	protected String text;

	// add by Denger
	// 在全屏宽度上,已经被其他控件占用了的宽度
	protected int subWidth;

	// add by Denger
	public int getSubWidth() {
		return Integer.parseInt((String)getStylePropertyValue(KuixConstants.TEXT_SUB_WIDTH, true));
	}

	// add by Denger
	public void setSubWidth(int subWidth) {
		this.subWidth = subWidth;
	}......略


 以样就可以通过getSubWidth()方法搞出XML布局里的subwidth,如文章最前面配置的是50,如果没有配置这个属性,则得到第2步骤里设置的默认值5.

END.

 

PS:我这里添加的subwidth属性是TextArea的换行显示用到的,如下图,左边已经有一个小方块图片占用了屏幕的一些宽度,右边的TextArea就得以屏幕宽度减去图片占用宽度(subwidth)来计算文字何时换行

具体换行会另起一文

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值