/* * ****************************************************************************** * Copyright (c) 2013-2014 Gabriele Mariotti. * * 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 it.gmariotti.cardslib.library.internal; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import it.gmariotti.cardslib.library.R; import it.gmariotti.cardslib.library.internal.base.BaseCard; /** * Card Expand model. * <p> * You can customize this component. See https://github.com/gabrielemariotti/cardslib/tree/master/doc/EXPAND.md for more information. * </p> * You can easily extend and customize this class providing your inner layout and * setting your values with {@link #setupInnerViewElements(android.view.ViewGroup, android.view.View)} method. * </p> * <b>Usege example:</b> * <pre> * <code> * //This provide a simple (and useless) expand area * CardExpand expand = new CardExpand(getContext()); * * //Set inner title in Expand Area * expand.setTitle(getString(R.string.demo_expand_basetitle)); * * //Add expand to card * card.addCardExpand(expand); * </code> * </pre> * </p> * <b>Custom example:</b> * <pre> * <code> * public class CustomExpandCard extends CardExpand { * * * public CustomExpandCard(Context context) { * super(context, R.layout.carddemo_standard_inner_expand); * } * * public void setupInnerViewElements(ViewGroup parent, View view) { * * if (view == null) return; * * //Retrieve TextView elements * TextView tx1 = (TextView) view.findViewById(R.id.carddemo_expand_text1); * TextView tx2 = (TextView) view.findViewById(R.id.carddemo_expand_text2); * TextView tx3 = (TextView) view.findViewById(R.id.carddemo_expand_text3); * TextView tx4 = (TextView) view.findViewById(R.id.carddemo_expand_text4); * * //Set value in text views * if (tx1 != null) { * tx1.setText(getContext().getString(R.string.demo_expand_customtitle1)); * } * } *} *</code> *</pre> * * See this page for more information https://github.com/gabrielemariotti/cardslib/tree/master/EXPAND.md * * @author Gabriele Mariotti (gabri.mariotti@gmail.com) */ public class CardExpand extends BaseCard { private boolean couldUseNativeInnerLayout = false; // ------------------------------------------------------------- // Constructors // ------------------------------------------------------------- /** * Constructor with a inner base layout defined by R.layout.inner_base_expand * * @param context context */ public CardExpand(Context context) { this(context, R.layout.inner_base_expand); } /** * Constructor with resource ID for inner layout * * @param context context * @param innerLayout resource ID for inner layout */ public CardExpand(Context context, int innerLayout) { super(context); mInnerLayout= innerLayout; if (innerLayout == R.layout.inner_base_expand) couldUseNativeInnerLayout = true; } // ------------------------------------------------------------- // Inner View and elements // ------------------------------------------------------------- /** * Inflates the inner layout and adds to parent layout. * Then calls {@link #setupInnerViewElements(android.view.ViewGroup, android.view.View)} method * to setup all values. * * @param context context * @param parent Inner Frame * @return */ @Override public View getInnerView(Context context, ViewGroup parent) { //Check if the default inner layout could be the native layout if (couldUseNativeInnerLayout && isNative()) mInnerLayout = R.layout.native_inner_base_expand; //Inflate the inner layout View view= super.getInnerView(context, parent); //This provides a simple implementation with a single title if (view!=null){ //Add inner view to parent parent.addView(view); //Setup values if (mInnerLayout>-1 ){ setupInnerViewElements(parent,view); } } return view; } /** * This method sets values to expand elements and customizes view. * * Override this method to customize your Expand View * * @param parent Expand external Layout * @param view inner-expand view */ @Override public void setupInnerViewElements(ViewGroup parent, View view) { //Add simple title to expand area if (view!=null){ TextView mTitleView=(TextView) view.findViewById(R.id.card_expand_inner_simple_title); if (mTitleView!=null) mTitleView.setText(mTitle); } } /** * Returns true if the card is using the native card * @return */ protected boolean isNative(){ if (getParentCard() != null) return getParentCard().isNative(); return false; } }