3

Google I/O 2011のioschedアプリをいじっています。ScheduleFragment を見て、ワークスペースの子でページを前後に移動する別のビューをテストしています。ただし、子ビューで親を埋めるのに問題があります。いくつかの背景色とパディングを追加して、すべてがどこに配置されているかを示しました。これが私のテストです...

このようにfragment_schedule.xmlの「Workspace」項目に赤い背景色を追加した...

android:background="#cc0000"

次に、子ビューに blocks_content.xml を使用する代わりに、私は独自の pending_content.xml を作成しました。これは、単純な緑の背景の LinearLayout (高さの fill_parent を使用) と青の背景の TextView (高さの fill_parent を使用) です。テキスト行。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#00cc00"
    android:padding="5dip"
    xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView
        android:id="@+id/text_view"
        android:background="#0000cc"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:text="Pending Content"
        android:textColor="#ffffff"
        />
</LinearLayout>

I/O アプリに「日」があるように、ビューを追加します...

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_schedule, null);
mWorkspace = (Workspace) root.findViewById(R.id.workspace);

ShootView view = new ShootView();
view.index = mViews.size();
view.rootView = (ViewGroup) inflater.inflate(R.layout.pending_content, null);
view.label = "Pending";
mWorkspace.addView(view.rootView);
mViews.add(view);

デバイスで表示すると、次のように表示されます。

http://www.milescew.com/images/workspace.png

赤のワークスペースが使用可能な親スペースを埋めていることがわかりますが、緑の LinearLayout はそうではありません。私は何が欠けていますか?

4

2 に答える 2

3

問題は、インフレ ステップ中に次のことを行うことです。

view.rootView = (ViewGroup) inflater.inflate(R.layout.pending_content, null);

XML で定義されたものを失い、LayoutParamsビューは実際にはデフォルトのレイアウト パラメータで終了します。

あなたがする必要があるのは、rootインフレの間に膨張したレイアウトをルートに添付しないでください:

view.rootView = (ViewGroup) inflater.inflate(R.layout.pending_content, mWorkspace, false);

これにより、レイアウト インフレータはLayoutParams、解析された XML 属性から子ビューの適切なセットを構築できます。

于 2011-06-03T18:23:05.543 に答える
0

私は解決策を考え出しました。onLayoutWorkspace.java でのデバッグを開始しました。child.layout 関数呼び出しでは、代わりにワークスペースの高さを使用するように変更child.getMeasuredHeight()しました。this.getMeasuredHeight()

ワークスペースの高さよりも短いページの場合と、ワークスペースの高さよりも大きい子 (長い ListView) の場合は、うまく機能するようです。

于 2011-06-07T13:07:17.403 に答える