/******************************************************************************* * Copyright 2012-present Pixate, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.pixate.freestyle.styling.stylers; import java.util.HashMap; import java.util.Map; import android.annotation.TargetApi; import android.os.Build; import android.widget.Spinner; import com.pixate.freestyle.annotations.PXDocProperty; import com.pixate.freestyle.annotations.PXDocStyler; import com.pixate.freestyle.styling.PXDeclaration; import com.pixate.freestyle.util.PXLog; // @formatter:off /** * - vertical-offset: length * - horizontal-offset: length * - width: length */ // @formatter:on @PXDocStyler(properties = { @PXDocProperty(name = "vertical-offset", syntax = "<length>"), @PXDocProperty(name = "horizontal-offset", syntax = "<length>"), @PXDocProperty(name = "width", syntax = "<length>"), }) public class PXSpinnerDropDownStyler extends PXStylerBase { private static String TAG = PXSpinnerDropDownStyler.class.getSimpleName(); private static Map<String, PXDeclarationHandler> handlers; private static PXSpinnerDropDownStyler instance; public synchronized static PXSpinnerDropDownStyler getInstance() { if (instance == null) { instance = new PXSpinnerDropDownStyler(null); } return instance; } public PXSpinnerDropDownStyler(PXStylerInvocation invocation) { super(invocation); } @Override public Map<String, PXDeclarationHandler> getDeclarationHandlers() { synchronized (PXSpinnerDropDownStyler.class) { if (handlers == null) { handlers = new HashMap<String, PXDeclarationHandler>(3); handlers.put("vertical-offset", new PXDeclarationHandler() { @Override public void process(PXDeclaration declaration, PXStylerContext stylerContext) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { setDropDownVerticalOffset((Spinner) stylerContext.getStyleable(), (int) declaration.getFloatValue(stylerContext .getDisplayMetrics())); } else { if (PXLog.isLogging()) { PXLog.w(TAG, "Spinner drop-down 'vertical-offset' requires API 16"); } } } }); handlers.put("horizontal-offset", new PXDeclarationHandler() { @Override public void process(PXDeclaration declaration, PXStylerContext stylerContext) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { setDropDownHorizontalOffset((Spinner) stylerContext.getStyleable(), (int) declaration.getFloatValue(stylerContext .getDisplayMetrics())); } else { if (PXLog.isLogging()) { PXLog.w(TAG, "Spinner drop-down 'horizontal-offset' requires API 16"); } } } }); handlers.put("width", new PXDeclarationHandler() { @Override public void process(PXDeclaration declaration, PXStylerContext stylerContext) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { setDropDownWidth((Spinner) stylerContext.getStyleable(), (int) declaration.getFloatValue(stylerContext .getDisplayMetrics())); } else { if (PXLog.isLogging()) { PXLog.w(TAG, "Spinner drop-down 'width' requires API 16"); } } } }); } return handlers; } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) protected void setDropDownWidth(Spinner spinner, int pixels) { spinner.setDropDownWidth(pixels); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) protected void setDropDownHorizontalOffset(Spinner spinner, int pixels) { spinner.setDropDownHorizontalOffset(pixels); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) protected void setDropDownVerticalOffset(Spinner spinner, int pixels) { spinner.setDropDownVerticalOffset(pixels); } }