<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)来计算文字何时换行
具体换行会另起一文