2012-07-01 72 views
0

我有這樣的LinearLayout是一個RelativeLayout的的孩子除其他事項外一個ListView一起:如何在第一次繪製時以編程方式顯示佈局佈局?

<LinearLayout 
    android:id="@+id/color_bar" 
    android:layout_alignParentBottom="true" 
    android:layout_weight="1" 
    android:layout_width="match_parent" 
    android:layout_height="16dp" 
    android:padding="0dp" 
    android:orientation="horizontal" 
> 
    <TextView 
     android:id="@+id/space_used_bar" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:background="#006688" 
     android:padding="0dp" 
    /> 
    <TextView 
     android:id="@+id/space_free_bar" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:background="#444444" 
     android:padding="0dp" 
    /> 
</LinearLayout> 

我不打算把這些TextViews任何文字;他們只是在那裏爲他們的背景顏色值。我想以編程方式設置這兩個TextView的寬度,我可以這樣做,但問題是第一次顯示LinearLayout時,它沒有繪製。它沒有大小,我也看不到其中包含的TextViews。當用戶幾乎做了任何事情(例如鎖定屏幕,按主頁按鈕,單擊列表項目,選擇選項項目等)TextViews正常顯示。只是在活動打開的第一時刻,TextViews和Layout並沒有顯示出來。有誰知道這個問題可能是什麼?

P.S.我已經嘗試在LinearLayout以及各個TextViews上調用invalidate。

編輯:這裏是回調

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    //Log.d(TAG, "onCreate()"); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.browser); 
    topMenu = getActionBar(); 
    lv = (ListView) findViewById(R.id.file_list); 
    spaceUsedBar = (TextView) findViewById(R.id.space_used_bar); 
    spaceFreeBar = (TextView) findViewById(R.id.space_free_bar); 
    spaceUsed = (TextView) findViewById(R.id.space_used); 
    spaceFree = (TextView) findViewById(R.id.space_free); 
    colorBar = (LinearLayout) findViewById(R.id.color_bar); 
    stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); 

    if (savedInstanceState == null) 
    { 
     if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
      currentDirectory = externalStorageDirectory; 
     else 
     { 
      currentDirectory = new File(ROOT_DIR); 
      Toast t = Toast.makeText(c, R.string.not_mounted, Toast.LENGTH_SHORT); 
      t.show(); 
     } 
    } 
    else 
    { 
     currentDirectory = new File(savedInstanceState.getString("savedPath")); 
     int savedPosition = savedInstanceState.getInt("savedPosition"); 
     int savedListTop = savedInstanceState.getInt("savedListTop"); 
     if (savedPosition >= 0) 
      lv.setSelectionFromTop(savedPosition, savedListTop); 
    } 
} 

@Override 
public void onStart() 
{ 
    //Log.d(TAG, "onStart()"); 

    super.onStart(); 
    lv.setOnItemClickListener(this); 
    lv.setMultiChoiceModeListener(this); 
    browseTo(currentDirectory); 
} 

@Override 
public void onResume() 
{ 
    //Log.d(TAG, "onResume()"); 

    super.onResume(); 
} 

回答

0

我猜你沒有用戶離開後,然後返回設置爲TextViews新的寬度後重繪佈局,並且當系統重新繪製佈局(鎖定屏幕,主頁按鈕,方向更改等)。但我沒有看到你的onCreate()和onResume()代碼,所以它只是一個猜測...

+0

是的,這是讓我感到困惑的部分。我經歷了所有的代碼之間發生的時間,直到他們沒有出現,而且這似乎完全是任意的。我會很快發佈代碼。 –

0

我不確定這是否會工作,但請嘗試以下方法之一(在文字上)。比如你分配給它一些初步的寬度或重量,然後該代碼執行時,相應調整編程吧...

android:layout_width="40dp" 

如果您希望他們採取了屏幕的百分比,而不是使用重屬性:

android:layout_weight="2" 
+0

是的,我已經做到了這一點,雖然它會讓它們顯示出來,但它們並不是我在代碼中指定的寬度。它們首先按佈局定義顯示,然後稍後更改爲通過我的代碼指定的大小。 –

相關問題