问题描述
有一个 text
部分,基本上居中对齐。
text { "elm.text";
scale: 1;
clip_to: "elm.clipper";
desc { "default";
visible: 1;
rel1.to: "elm.clipper";
rel2.to: "elm.clipper";
align: 0 0.5; //NOT WORKING
text {
text: "elm.text very very very long";
size: 24;
align: 0.5 0.5;
ellipsis: -1;
}
}
居中对齐有效,但如果文本比容器长,我希望该文本左对齐。
我不想使用 min
,因为它会破坏我的布局。
我也不想使用任何脚本,因为它会破坏用户体验。
解决方法
有什么理由不使用省略号吗?
我认为,省略号:0;是最简单的方法。
如果不是,则需要创建另一个状态并根据情况进行STATE_SET。
text { "elm.text";
scale;
clip_to: "elm.clipper";
desc { "default";
vis;
rel.to: "elm.clipper";
align: 0.0 0.5;
text {
text: "elm.text text"; // for short text
size: 24;
align: 0.5 0.5;
ellipsis: 0;
}
}
desc { "left_align"; // for long text
inherit: "default" 0.0;
text.align: 0.0 0.5;
}
}
,
我认为你应该使用脚本。
但你不想要它。对吗?
我不知道其他任何方法,但我会在下面分享方法。
首先设置“min:1 1;”到文本(文本部分随着文本的长度增加。)
in script :
public text_len = 0;
public clipper_len = 0;
...
public set_align() {
new x,y,w,h;
get_geometry(PART:"elm.text",x,h);
set_int(text_len,w);
get_geometry(PART:"elm.clipper",h);
set_int(clipper_len,w);
if (get_int(text_len) > get_int(clipper_len)) {
run_program(PROGRAM:"set_left");
}
else {
run_program(PROGRAM:"set_center");
}
}
同样的逻辑可以用c代码实现,但可能更复杂。