2012-02-26 39 views
0

我正在準備做一個類似的android演示,我想寫的第一個應用程序之一將是一個屏幕充滿了不同的小部件(這當然是視圖),但想把它們放在屏幕上沒有任何佈局,以容納他們。這是可能的,還是你必須使用佈局一次在屏幕上放置多個視圖(小部件)?Android - 在不使用佈局的情況下向屏幕添加不同的視圖(小部件)?

所以,現在我可以這樣做:

public class MainActivity extends Activity { 

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

    TextView view1 = new TextView(this); 
    view1.setText("I am view one"); 

    setContentView(view1); 




    } 
} 

在這種情況下,我真的還沒有指定的佈局但似乎沒有被定位在屏幕上的小部件多不設置佈局的方式。這樣做的目的是爲了說明你爲什麼要使用佈局。也許有一種方法可以在屏幕上顯示小部件,而無需調用setContentView方法。

回答

1

您只能將多個小部件/視圖添加到名爲ViewGroup的東西。如果你看一下文檔,你會看到 - 毫不奇怪 - 基本上所有的佈局擴展了這個類。同樣,如果你查閱關於例如一個TextView,你會發現它沒有擴展ViewGroup(它繼承自View,就像ViewGroup一樣,這意味着它在層次結構樹的不同分支上)。

換句話說:您需要某種佈局才能同時顯示多個窗口小部件/視圖。除非使用ListActivityListFragment之類的東西,否則默認情況下會創建一個以ListView作爲根的佈局,您也總是需要明確地致電setContentView()

話雖這麼說,你的例子實際上是對活動設置以下佈局的只是一個的程序化的方式:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="I am view one" /> 
0

你可以這樣說:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FrameLayout frameLayout = new FrameLayout(this); 

    TextView view1 = new TextView(this); 
    view1.setText("I am view one"); 
    frameLayout.addView(view1); 
    // add more widgets into ViewGroup as you want 

    // then set the viewgroup as content view 
    setContentView(frameLayout); 




    } 
相關問題