Принудительное выравнивание текста по центру по левому краю, если он длиннее

#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 .