package mobi.monaca.framework.nativeui.component; import static mobi.monaca.framework.nativeui.UIUtil.buildOpacity; import static mobi.monaca.framework.nativeui.UIUtil.dip2px; import static mobi.monaca.framework.nativeui.UIUtil.updateJSONObject; import mobi.monaca.framework.nativeui.DefaultStyleJSON; import mobi.monaca.framework.nativeui.UIContext; import mobi.monaca.framework.nativeui.UIValidator; import mobi.monaca.framework.nativeui.exception.NativeUIException; import org.json.JSONException; import org.json.JSONObject; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.widget.TextView; public class LabelComponent extends ToolbarComponent { protected TextView view; protected static final String[] LABEL_VALID_KEYS = { "style","iosStyle", "androidStyle", "component", "id", }; protected static final String[] STYLE_VALID_KEYS = { "opacity", "textColor", "text" }; public LabelComponent(UIContext context, JSONObject labelJSON) throws NativeUIException, JSONException { super(context, labelJSON); this.view = new TextView(context); this.view.setGravity(Gravity.CENTER_VERTICAL); style(); } public void updateStyle(JSONObject update) throws NativeUIException { updateJSONObject(style, update); style(); } public View getView() { return view; } protected void style() throws NativeUIException { view.setBackgroundColor(0x00000000); if (style.has("text")) { view.setText(style.optString("text", "")); } view.setVisibility(style.optBoolean("visibility", true) ? View.VISIBLE : View.INVISIBLE); int textColor = UIValidator.parseAndValidateColor(uiContext, getComponentName() + " style", "textColor", "#ffffff", style); view.setTextColor(textColor); float opacity = UIValidator.parseAndValidateFloat(uiContext, getComponentName() + " style", "opacity", "1.0", style, 0.0f, 1.0f); view.setTextColor(view.getTextColors().withAlpha(buildOpacity(opacity))); view.setShadowLayer(1f, 0f, -1f, 0xcc000000); view.setTextSize(TypedValue.COMPLEX_UNIT_PX, uiContext.getFontSizeFromDip(Component.LABEL_TEXT_DIP)); view.setPadding(dip2px(uiContext, 3), dip2px(uiContext, 4), dip2px(uiContext, 3), dip2px(uiContext, 4)); if (style.has("backgroundColor")) { int backgroundColor = UIValidator.parseAndValidateColor(uiContext, getComponentName() + " style", "backgroundColor", "#ffffff", style); view.setBackgroundColor(backgroundColor); view.getBackground().setAlpha(buildOpacity(opacity)); } else { view.setBackgroundColor(0); } } @Override public String getComponentName() { return "Label"; } @Override public JSONObject getDefaultStyle() { return DefaultStyleJSON.label(); } @Override public String[] getValidKeys() { return LABEL_VALID_KEYS; } }