Android - 在不使用布局的情况下向屏幕添加不同的视图(小部件)?

时间:2012-02-26 00:40:56

标签: 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方法。

2 个答案:

答案 0 :(得分:1)

您只能将多个小部件/视图添加到名为ViewGroup的内容中。如果您看一下您将看到的文档 - 毫不奇怪 - 基本上所有布局都扩展了这个类。同样,如果您查看文档,例如一个TextView,你会发现它没有扩展ViewGroup(它确实从View继承,就像ViewGroup一样,这意味着它位于层次结构树中的另一个分支上。)

换句话说:您需要某种布局才能一次显示多个窗口小部件/视图。您还需要显式调用setContentView(),除非您使用ListActivityListFragment之类的内容,默认情况下会创建一个以ListView为根的布局。

话虽如此,您的示例实际上只是在活动中设置以下布局的一种程序化方式:

<?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" />

答案 1 :(得分: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);




  }