package com.android_mvc.framework.ui.view;
import java.util.ArrayList;
import java.util.HashMap;
import com.android_mvc.framework.annotations.SuppressDebugLog;
import com.android_mvc.framework.ui.view.etc.LayoutUtil;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
/**
* RelativeLayoutのラッパークラス。
* @author id:language_and_engineering
*
*/
@SuppressDebugLog
public class MRelativeLayout extends RelativeLayout implements IFWView, IFWLayoutView
{
// このレイアウトが含んでいるビュー達
public ArrayList<View> includingViews;
// 描画が終了した内部Viewの個数
private int numInflatedViews = 0;
public MRelativeLayout(Context context)
{
super(context);
includingViews = new ArrayList<View>();
}
public MRelativeLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
includingViews = new ArrayList<View>();
}
// NOTE: このコンストラクタがないと描画時に下記の例外になる。
// android.view.InflateException: Binary XML file line #~: Error inflating class ~
// @see http://q.hatena.ne.jp/1322903451
// 独自レイアウトとして共通のメソッド
@Override
public MRelativeLayout add(View...v)
{
return (MRelativeLayout)LayoutUtil.addViewsToLayout(this, v);
}
@Override
public void addOneIncludingView( View v )
{
this.includingViews.add( v );
}
@Override
public int getNumInflatedViews() {
return numInflatedViews;
}
@Override
public void inflateInside()
{
LayoutUtil.renderAllUnrenderedViewsInsideLayout(this);
}
@Override
public View getIncludingViewAt(int i) {
return includingViews.get(i);
}
@Override
public void updateNumInflatedViews() {
numInflatedViews = getIncludingViewsSize();
}
@Override
public int getIncludingViewsSize()
{
return includingViews.size();
}
@Override
public void registerAndRenderOneView(View v)
{
LayoutUtil.registerAndRenderOneViewInLayout(v, this);
}
@Override
public int[] getWidthHeightOfView(View v) {
return LayoutUtil.getWidthHeightOfViewInLayout(v, this);
}
@Override
public void removeAllIncludingViews() {
this.includingViews.clear();
}
// パラメータ保持
HashMap<String, Object> view_params = new HashMap<String, Object>();
@Override
public Object getViewParam(String key) {
return view_params.get(key);
}
@Override
public void setViewParam(String key, Object val) {
view_params.put(key, val);
}
// 以下は属性操作
public MRelativeLayout widthFillParent() {
setViewParam("layout_width", ViewGroup.LayoutParams.FILL_PARENT );
return this;
}
public MRelativeLayout heightWrapContent() {
setViewParam("layout_height", ViewGroup.LayoutParams.WRAP_CONTENT );
return this;
}
public MRelativeLayout heightFillParent() {
setViewParam("layout_height", ViewGroup.LayoutParams.FILL_PARENT );
return this;
}
public MRelativeLayout heightPx( int px ) {
setViewParam("layout_height", px );
// http://stackoverflow.com/questions/1357577/how-to-set-the-width-of-a-layout-in-android
return this;
}
public MRelativeLayout paddingPx( int px ) {
setPadding(px, px, px, px);
return this;
}
}