package com.android_mvc.framework.ui.view.etc;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.android_mvc.framework.annotations.SuppressDebugLog;
import com.android_mvc.framework.common.FWUtil;
import com.android_mvc.framework.ui.view.IFWLayoutView;
import com.android_mvc.framework.ui.view.IFWView;
/**
* Layout系のカスタムビューに関するロジック。
* @author id:language_and_engineering
*
*/
@SuppressDebugLog
public class LayoutUtil
{
// NOTE: LinearLayoutとRelativeLayoutなどでロジックを共通化するために,やむなく作ったクラス。
/**
* 1つのビューをレイアウト内に描画する。
*/
public static void registerAndRenderOneViewInLayout(View innerView, IFWLayoutView layout)
{
FWUtil.d("1ビューの描画を開始。");
// このViewのタテヨコ値を取得
int[] arr = layout.getWidthHeightOfView(innerView);
int intWidth = arr[0];
int intHeight = arr[1];
// FW定義のレイアウト要素であれば,そのレイアウトの中身を具体化する
if( innerView instanceof IFWLayoutView )
{
FWUtil.d("FW定義のレイアウトを発見");
// 中身を具体化
((IFWLayoutView)innerView).inflateInside();
FWUtil.d("FW定義の1レイアウト内の描画処理が完了");
}
// 親レイアウト内に描画
((ViewGroup)layout).addView(innerView, new LinearLayout.LayoutParams(intWidth, intHeight));
// http://www.javadrive.jp/android/linearlayout/index5.html
FWUtil.d("1ビューの描画を終了。");
}
/**
* Layout内の特定のViewのタテヨコ値を取得
*/
public static int[] getWidthHeightOfViewInLayout(View v, IFWLayoutView layout)
{
// デフォルトのタテヨコ値
int intWidth = ViewGroup.LayoutParams.WRAP_CONTENT;
int intHeight = ViewGroup.LayoutParams.WRAP_CONTENT;
// FW定義のViewであれば,タテヨコ設定
if( v instanceof IFWView )
{
FWUtil.d("FW定義のViewを発見。タテヨコ設定を抽出。");
// キャストして考える
IFWView fwv = (IFWView)v;
// 属性取得
if( fwv.getViewParam("layout_width") != null )
{
intWidth = (Integer)fwv.getViewParam("layout_width");
}
if( fwv.getViewParam("layout_height") != null )
{
intHeight = (Integer)fwv.getViewParam("layout_height");
}
}
FWUtil.d("Viewのタテヨコ設定の抽出が完了。");
// 配列で返す
return new int[]{intWidth, intHeight};
}
/**
* Layout内に存在する,未描画の全Viewを描画する。
*/
public static void renderAllUnrenderedViewsInsideLayout(IFWLayoutView layout)
{
// 未描画の全Viewについて
for(int i = layout.getNumInflatedViews(); i < layout.getIncludingViewsSize(); i ++ )
{
View v = layout.getIncludingViewAt(i);
// 描画
layout.registerAndRenderOneView(v);
}
// 描画済みView数を更新
layout.updateNumInflatedViews();
}
/**
* 可変個のViewをレイアウトに追加する。
*/
public static IFWLayoutView addViewsToLayout(IFWLayoutView layout, View...v)
{
for( int i = 0; i < v.length; i ++ )
{
FWUtil.d("追加対象のViewは" + v.toString() );
layout.addOneIncludingView( v[i] );
}
FWUtil.d("addによって" + v.length + "個のViewを追加登録。");
return layout;
}
}