This worked for me:
/**
* Created by JT on 8/31/2015.
*/
package UI.MobileSkins
{
import flash.events.Event;
import flash.events.SoftKeyboardEvent;
import mx.core.EventPriority;
import mx.core.mx_internal;
import mx.events.FlexEvent;
import spark.components.TextInput;
import spark.components.supportClasses.StyleableTextField;
import spark.skins.mobile.supportClasses.TextSkinBase;
use namespace mx_internal;
import mx.core.DPIClassification;
import mx.utils.Platform;
import spark.skins.mobile.TextInputSkin;
import spark.skins.mobile120.assets.TextInput_border;
import spark.skins.mobile160.assets.TextInput_border;
import spark.skins.mobile240.assets.TextInput_border;
import spark.skins.mobile320.assets.TextInput_border;
import spark.skins.mobile480.assets.TextInput_border;
import spark.skins.mobile640.assets.TextInput_border;
public class UpdatedTextInputSkin extends TextSkinBase
{
private var _isIOS:Boolean;
public function UpdatedTextInputSkin()
{
super();
_isIOS = Platform.isIOS;
switch (applicationDPI)
{
case DPIClassification.DPI_640:
{
borderClass =
spark.skins.mobile640.assets.TextInput_border;
layoutCornerEllipseSize = 48;
measuredDefaultWidth = 1200;
measuredDefaultHeight = 120;
layoutBorderSize = 3;
break;
}
case DPIClassification.DPI_480:
{
// Note provisional may need changes
borderClass =
spark.skins.mobile480.assets.TextInput_border;
layoutCornerEllipseSize = 24;
measuredDefaultWidth = 880;
measuredDefaultHeight = 60;
layoutBorderSize = 2;
break;
}
case DPIClassification.DPI_320:
{
borderClass =
spark.skins.mobile320.assets.TextInput_border;
layoutCornerEllipseSize = 24;
measuredDefaultWidth = 600;
measuredDefaultHeight = 40;
layoutBorderSize = 2;
break;
}
case DPIClassification.DPI_240:
{
borderClass =
spark.skins.mobile240.assets.TextInput_border;
layoutCornerEllipseSize = 12;
measuredDefaultWidth = 440;
measuredDefaultHeight = 35;
layoutBorderSize = 1;
break;
}
case DPIClassification.DPI_120:
{
borderClass =
spark.skins.mobile120.assets.TextInput_border;
layoutCornerEllipseSize = 6;
measuredDefaultWidth = 220;
measuredDefaultHeight = 20;
layoutBorderSize = 1;
break;
}
default:
{
borderClass =
spark.skins.mobile160.assets.TextInput_border;
layoutCornerEllipseSize = 12;
measuredDefaultWidth = 300;
measuredDefaultHeight = 24;
layoutBorderSize = 1;
break;
}
}
}
public var hostComponent:TextInput; // SkinnableComponent will
populate
/**
* @private
/**
* @private
*/
private var _isEditing:Boolean;
override protected function createChildren():void
{
super.createChildren();
textDisplay.addEventListener("editableChanged",
editableChangedHandler);
textDisplay.addEventListener(FlexEvent.VALUE_COMMIT,
valueCommitHandler);
// remove hit area improvements on iOS when editing
if (_isIOS)
{
textDisplay.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING,
textDisplay_softKeyboardActivatingHandler, false,
EventPriority.DEFAULT_HANDLER);
textDisplay.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE,
textDisplay_softKeyboardDeactivateHandler);
}
}
override protected function measure():void
{
super.measure();
var paddingLeft:Number = getStyle("paddingLeft");
var paddingRight:Number = getStyle("paddingRight");
var paddingTop:Number = getStyle("paddingTop");
var paddingBottom:Number = getStyle("paddingBottom");
var textHeight:Number = getStyle("fontSize") as Number;
if (textDisplay)
{
// temporarily change text for measurement
var oldText:String = textDisplay.text;
// commit styles so we can get a valid
textHeight
textDisplay.text = "Wj";
textDisplay.commitStyles();
textHeight = textDisplay.measuredTextSize.y;
textDisplay.text = oldText;
}
// width is based on maxChars (if set)
if (hostComponent && hostComponent.maxChars)
{
// Grab the fontSize and subtract 2 as the
pixel value for each character.
// This is just an approximation, but it
appears to be a reasonable one
// for most input and most font.
var characterWidth:int = Math.max(1,
(getStyle("fontSize") - 2));
measuredWidth = (characterWidth *
hostComponent.maxChars) +
paddingLeft + paddingRight +
StyleableTextField.TEXT_WIDTH_PADDING;
}
measuredHeight = paddingTop + textHeight +
paddingBottom;
}
override protected function layoutContents(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.layoutContents(unscaledWidth, unscaledHeight);
// position & size border
if (border)
{
setElementSize(border, unscaledWidth,
unscaledHeight);
setElementPosition(border, 0, 0);
}
// position & size the text
var paddingLeft:Number = getStyle("paddingLeft");
var paddingRight:Number = getStyle("paddingRight");
var paddingTop:Number = getStyle("paddingTop");
var paddingBottom:Number = getStyle("paddingBottom");
var unscaledTextWidth:Number = unscaledWidth -
paddingLeft - paddingRight;
var unscaledTextHeight:Number = unscaledHeight -
paddingTop - paddingBottom;
// default vertical positioning is centered
var textHeight:Number =
getElementPreferredHeight(textDisplay);
var textY:Number = Math.round(0.5 * (unscaledTextHeight
- textHeight)) + paddingTop;
// On iOS the TextField top and bottom edges are
bounded by the padding.
// On all other platforms, the height of the
textDisplay is
// textHeight + paddingBottom to increase hitArea on
bottom.
// Note: We don't move the Y position upwards because
TextField
// has way to set vertical positioning.
// Note: iOS is a special case due to the clear button
provided by the
// native text control used while editing.
var adjustedTextHeight:Number = (_isIOS && _isEditing)
? textHeight : textHeight + paddingBottom;
if (textDisplay)
{
// We're going to do a few tricks to try to
increase the size of our hitArea to make it
// easier for users to select text or put the
caret in a certain spot. To do that,
// rather than set textDisplay.x=paddingLeft,
we are going to set
// textDisplay.leftMargin = paddingLeft. In
addition, we're going to size the height
// of the textDisplay larger than just the size
of the text inside to increase the hitArea
// on the bottom. We'll also assign
textDisplay.rightMargin = paddingRight to increase the
// the hitArea on the right. Unfortunately,
there's no way to increase the hitArea on the top
// just yet, but these three tricks definitely
help out with regards to user experience.
// See
http://bugs.adobe.com/jira/browse/SDK-29406 and
http://bugs.adobe.com/jira/browse/SDK-29405
// set leftMargin, rightMargin to increase the
hitArea. Need to set it before calling commitStyles().
var marginChanged:Boolean =
((textDisplay.leftMargin != paddingLeft) ||
(textDisplay.rightMargin != paddingRight));
textDisplay.leftMargin = paddingLeft;
textDisplay.rightMargin = paddingRight;
// need to force a styleChanged() after setting
leftMargin, rightMargin if they
// changed values. Then we can validate the
styles through commitStyles()
if (marginChanged)
textDisplay.styleChanged(null);
textDisplay.commitStyles();
setElementSize(textDisplay, unscaledWidth,
adjustedTextHeight);
// set x=0 since we're using
textDisplay.leftMargin = paddingLeft
setElementPosition(textDisplay, 0, textY);
}
if (promptDisplay)
{
promptDisplay.commitStyles();
setElementSize(promptDisplay,
unscaledTextWidth, adjustedTextHeight);
setElementPosition(promptDisplay, paddingLeft,
textY);
}
}
/**
* @private
*/
private function editableChangedHandler(event:Event):void
{
invalidateDisplayList();
}
/**
* @private
* The text changed in some way.
*
* Dynamic fields (ie !editable) with no text measure with
width=0 and height=0.
* If the text changed, need to remeasure the text to get the
correct height so it
* will be laid out correctly.
*/
private function valueCommitHandler(event:Event):void
{
if (textDisplay && !textDisplay.editable)
invalidateDisplayList();
}
/**
* @private
*/
private function
textDisplay_softKeyboardActivatingHandler(event:SoftKeyboardEvent):void
{
if (event.isDefaultPrevented())
return;
_isEditing = true;
invalidateDisplayList();
}
/**
* @private
*/
private function
textDisplay_softKeyboardDeactivateHandler(event:SoftKeyboardEvent):void
{
_isEditing = false;
invalidateDisplayList();
}
}
}
-----Original Message-----
From: Alex Harui [mailto:[email protected]]
Sent: Wednesday, October 21, 2015 9:40 AM
To: [email protected]
Subject: Re: Problem with prompt text in spark.skins.mobile.TextAreaSkin
Can you post a 20-line (or less) test case?
Thanks,
-Alex
On 10/21/15, 12:57 AM, "chris_d_k" <[email protected]> wrote:
>Hi,
>
>I am using TextAreas and the spark.skins.mobile.TextAreaSkin.
>
>I want to use padding to give make the TextAreas higher and still
>having the text centered vertically.
>
>When I just add the padding via css the height of the TextArea is as
>heigh as before until I enter text. The prompt text inside the text are
>is cutted.
>
>How can I fix this/ what am I doing wrong?
>
>
>
>--
>View this message in context:
>http://apache-flex-users.2333346.n4.nabble.com/Problem-with-prompt-text
>-in -spark-skins-mobile-TextAreaSkin-tp11358.html
>Sent from the Apache Flex Users mailing list archive at Nabble.com.