2012-01-22 31 views
2

我已經用一個Activity編寫了一個簡單的Hello World應用程序。當佈局未明確聲明時,Activity的默認佈局是什麼?

類:

public class HelloWorld extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.helloworld); 
    } 

} 

helloworld.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/textview" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:text="@string/hello"/> 

我有所需的資源和 '的AndroidManifest.xml' 的地方,在應用程序運行正常。

在'hierarchyviewer'工具的'View Hierarchy window'中,我注意到TextView小部件的父代是FrameLayout,其父代是LinearLayout(爲了簡潔起見,我只剪切了所需的屏幕截圖)。屏幕截圖:

View Hierarchy window's screen shot

在我的 'helloworld.xml',我從來沒有宣佈的FrameLayout父爲TextView的部件。請幫助我理解:
1.通常,如果運行時未在佈局資源(xml文件)中明確聲明,運行時如何確定佈局?
2.在圖中,爲什麼LinearLayout是FrameLayout的父級?

非常感謝。

回答

0

如果設置的contentview未被調用,那麼R.java中的所有視圖都將爲null。具體來說,這是因爲在setContentView(xx)被調用之前視圖不會被創建。沒有「默認佈局」。

這些都是在Activity配置佈局的可用選項:

void  setContentView(int layoutResID) 
Set the activity content from a layout resource. 

void  setContentView(View view) 
Set the activity content to an explicit view. 

void  setContentView(View view, ViewGroup.LayoutParams params) 
Set the activity content to an explicit view. 

在這些方法中的其中之一的呼叫,您將實例你的意見到你的活動,所以從R提取它們.java它們將是非空的。

2

在Vikram Bodicherla發佈的鏈接提示和一些努力的幫助下,我找到了我的問題的答案。 我的問題的答案在於Android 3.0版本 - 「當應用程序安裝在運行Android 3.0或更高版本的設備上, 系統將全息主題應用於每個活動,因此,每個活動都包含Action Bar。」,來自文檔。

1通常,如果運行時未在佈局資源(xml文件)中明確聲明,運行時如何決定佈局?
- 請參閱下面的答案。

2在該圖中,爲什麼LinearLayout是FrameLayout的父級? - LineraLayout將用戶界面劃分爲兩部分 - 分別代表ActionBar和活動的用戶界面(組件,除 ActionBar組件外)的頂部和底部。底部有FrameLayout,它是一個適合佈局的佈局來包含任何佈局。因此,如果您的顯示器資源中沒有明確指定任何佈局,例如我的佈局資源(請參閱上述 - helloworld.xml),則組件始終將放置在FrameLayout中的 。如果你聲明瞭任何佈局,比如說GridLayout,甚至是LinearLayout或者FrameLayout,它仍然會被包含在將被包含在LinearLayout中的FrameLayout中。這也解釋了爲什麼「......活動內容視圖的父級始終是FrameLayout」。來自Vikram Bodicherla發佈的鏈接。

@Vikram Bodicherla - 我給了你的鏈接文章點,再次感謝。