2012-01-07 52 views
0

我試圖創建一個ViewFlipper,其中每個子View都有一些最小尺寸(根據它們的內容),但是每個尺寸都應該填充外部ViewFlipper。所以我想如果我把每個孩子的大小設爲FILL_PARENT,它就會按照我的意願去做。FILL_PARENT在ViewFlipper裏面沒有標題的對話框

但是,看起來會發生什麼情況是每個孩子的大小是單獨計算的,然後取最大值,這就是ViewFlipper的大小,但是不重新計算孩子的佈局以匹配這個新的尺寸。奇怪的是,這似乎只在設置了FEATURE_NO_TITLE時纔會發生。

下面是該問題的演示。子0的大小爲FILL_PARENT x FILL_PARENT,子1的子集爲100x100,因此ViewFlipper的大小被正確確定爲100x100。但是,子0不會調整爲100x100;實際上,它的尺寸爲0x0(正如您在運行應用程序時看到的那樣,看到紅色矩形上沒有綠色的痕跡)。但是,如果您刪除行

this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

那麼它將按預期工作... 這是怎麼回事嗎?

代碼:

package com.example.flipper; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.*; 
import android.widget.*; 

public class MainActivity extends Activity 
{ 
    ViewFlipper flipper; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

     this.flipper = new ViewFlipper(this); 
     flipper.setBackgroundColor(0xffff0000); 

     { 
      LinearLayout ll = new LinearLayout(this); 
      ll.setBackgroundColor(0xff00ff00); 
      flipper.addView (ll, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 
     } 

     { 
      LinearLayout ll = new LinearLayout(this); 
      ll.setBackgroundColor(0xff0000ff); 
      flipper.addView (ll, new ViewGroup.LayoutParams(100, 100)); 
     } 

     setContentView(flipper); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent e) 
    { 
     flipper.setDisplayedChild(1); 
     return true; 
    } 
} 

清單文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.flipper" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:label="@string/app_name" > 
     <activity android:name="MainActivity" 
        android:theme="@android:style/Theme.Dialog" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

回答

1

看來我還是能夠以雜牌來解決這個問題:我在LinearLayout包裹ViewFlipper,並設置爲活動的查看:

LinearLayout llOuter = new LinearLayout(this); 
llOuter.addView(flipper, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

setContentView(llOuter);