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