2013-02-21 3 views
0

Я создал класс RoundedTextInputSkin, который простирается от TextInputSkinКак дать TextInput кожу управления TextInput в Flex 4.5 мобильного

package skins 
{ 

    import assets.TextInput_389X35; 

    import spark.skins.mobile.TextInputSkin; 

    public class RoundedTextInputSkin extends TextInputSkin 
    { 

     public function RoundedTextInputSkin() 
     { 
      super(); 
      borderClass = TextInput_389X35; 
      layoutBorderSize = 5; 
     } 
    } 
} 

Теперь я дал эту кожу как skinClass к контролю TextInput. Я смог увидеть roundedTextInput, но текст, введенный в textinput, не отображается. Может ли кто-нибудь рассказать мне, что пошло не так с моим кодом.

Вот мой FXG файл

<?xml version="1.0" encoding="utf-8" ?> 
<Graphic version="2.0" ai:appVersion="16.0.0.682" ATE:version="1.0.0" flm:version="1.0.0" d:using="" xmlns="http://ns.adobe.com/fxg/2008" xmlns:ATE="http://ns.adobe.com/ate/2009" xmlns:ai="http://ns.adobe.com/ai/2009" xmlns:d="http://ns.adobe.com/fxg/2008/dt" xmlns:flm="http://ns.adobe.com/flame/2008"> 
     <Group x="3" y="1.35449" ai:seqID="1" flm:knockout="false"> 
     <Rect x="0.5" y="0.5" width="389" height="35" radiusX="16.9997" radiusY="16.9997" ai:seqID="2"> 
      <fill> 
      <LinearGradient x="194.5" y="0.38916" scaleX="34.2022" rotation="90"> 
       <GradientEntry ratio="0" color="#B0B0B0"/> 
       <GradientEntry ratio="1" color="#E0E0E0"/> 
      </LinearGradient> 
      </fill> 
     </Rect> 
     <Rect x="0.5" y="0.5" width="389" height="35" radiusX="16.9997" radiusY="16.9997" ai:seqID="3"/> 
     </Group> 
</Graphic> 

ответ

0

IT не ясно, каким образом ваш файл FXG относится к классу кожи вы показали. Но я собираюсь предположить, что предоставленный вами FXG является TextInput_389X35, на который ссылается код. Я предполагаю, что ваша пользовательская граница находится поверх всех других элементов; делая их невидимыми. По методу createChildren() TextSkinBase; пограничный элемент помещается поверх всего остального:

override protected function createChildren():void 
{ 
super.createChildren(); 
if (!textDisplay) 
{ 
    textDisplay = StyleableTextField(createInFontContext(StyleableTextField)); 
    textDisplay.styleName = this; 
    textDisplay.editable = true; 
    textDisplay.useTightTextBounds = false; 
    addChild(textDisplay); 
} 

if (!border) 
{ 
    border = new borderClass(); 
    addChild(border); 
} 
} 

Настройки по умолчанию элементы Border FXG используют пути для создания границы так, чтобы «заполнить» является границей. Используя Rectangle, вы помещаете большой квадрат поверх всего остального.

+0

Спасибо за комментарий flextras. Я попытался, поставив ваш код, добавив createChildren, но все же я не могу видеть текст, введенный в textinput. Я дал borderClass для borderClass = TextInput_389X35; Где TextInpu_389X35 - fxg. – Trinu

+0

@Trinu Это не мой код; он копируется непосредственно из TextSkinBase, чтобы показать, что BorderClass добавлен последним; таким образом, покрывая все остальное. Если вы хотите переопределить createChildren(), чтобы borderclass был установлен снизу; Вы можете сделать это. Но, я думаю, вы будете лучше подойти, переработав свой FXG, чтобы использовать путь вместо прямоугольника. – JeffryHouser

+0

@Flextras, как использовать путь вместо прямоугольника, который я попробовал в Adobe Illustrator, он всегда дает мне прямоугольник, но не путь. Можете ли вы помочь мне в этом. Я не могу видеть текст в текстовой строке. – Trinu

Смежные вопросы