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; } }