#tizen #tizen-native-app
Вопрос:
Наличие 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
, так как это портит мой макет.
Я также не хочу использовать какие-либо сценарии, так как это портит пользовательский интерфейс.
Есть ли у меня возможность решить эту проблему очень быстро?
Ответ №1:
Есть ли какая-то причина не использовать многоточие?
Я думаю, многоточие: 0; — это самый простой способ.
Если нет, вам нужно создать другое состояние и выполнить набор состояний в соответствии с ситуацией.
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;
}
}
Комментарии:
1. Мне нужно, чтобы длинный текст был выровнен по левому краю без другого состояния. Проблема в
ellipsis: 0
том, что он не выровняет мой длинный текст слева (еслиalign: 0.5 0.5
он все еще активен). Если я создам другое состояние, каков будет самый быстрый способ решить, должен ли текст находиться в состоянии по умолчанию или в левом состоянии? — С учетом того, что текст будет изменен с кода C.2. длинный текст не выровнен по левому
ellipsis: 0;
краю ? В этом случае длинный текст должен быть выровнен по левому краю. И это прекрасно работает в моем окружении. Если вы поделитесь своим полным кодом(edc), это может помочь найти другие проблемы.3.Если вы продолжите
text.align: 0.5 0.5
, независимо от того , подадите ли вы также заявкуtext.ellipsis: 0
, текст будет центрирован. Если вы не сохранитеtext.align: 0.5 0.5
и создадите новое СОСТОЯНИЕ, да, это работает, но КТО будет решать, какое состояние следует применить к тексту?
Ответ №2:
Я думаю, вам следует использовать сценарий.
Но ты этого не хочешь. Верно?
Я не знаю другого способа, но я поделюсь методом ниже.
Сначала установите «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, y, w, h);
set_int(text_len, w);
get_geometry(PART:"elm.clipper", x, y, w, 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");
}
}
Та же логика может быть реализована в коде на языке си, но она может быть более сложной.
Комментарии:
1. Спасибо. Кто будет звонить
set_align
? Мне нужно было бы звонить по этому номеру всякийelm.text
раз, когда что-то меняетсяelm_object_part_text_set
.