我正在尝试为我的Android应用程序创建一个TabActivity。当我的布局XML如下显示,并为我的2个选项卡提供伪TextView内容时,一切似乎都很好。

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="3px">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="10px">

            <TextView android:id="@+id/login_form" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="DUMMY LOGIN FORM" />
            <TextView android:id="@+id/register_form" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="DUMMY REGISTER FORM" />

        </FrameLayout>
    </LinearLayout>
</TabHost>


我想用包含多个View元素的LinearLayout替换每个TextView。但是,如果我尝试将TextView行替换为以下内容,则会立即获得“强制关闭”窗口。

<LinearLayout android:id="@+id/login_form" android:layout_width="fill_parent" layout_height="fill_parent" android:orientation="vertical">
    <TextView android:id="@+id/username_label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/username" />
</LinearLayout>
<LinearLayout android:id="@+id/register_form" android:layout_width="fill_parent" layout_height="fill_parent" android:orientation="vertical">
    <TextView android:id="@+id/username_desired_label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/username_desired" />
</LinearLayout>


为什么这会导致我被强制关闭?我是否应该使用除LinearLayout以外的其他视图将选项卡内容分组在一起?

编辑:如果与我的问题有关,我将扩展TabActivity类,并且我的onCreate方法如下所示:

protected void onCreate(Bundle savedInstanceState) {
    // display the login/register view
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_register);

    // associate the tab content with each tab, and specify the tab headers
    setDefaultTab(0);
    TabHost tabs = getTabHost();
    tabs.addTab(tabs.newTabSpec("login").setIndicator(getResources().getText(R.string.login)).setContent(R.id.login_form));
    tabs.addTab(tabs.newTabSpec("register").setIndicator(getResources().getText(R.string.register)).setContent(R.id.register_form));
}


编辑:根据要求,这是堆栈跟踪,以及仅显示“找不到源”的错误消息:


  线程[ main](已暂停
  (RuntimeException除外)
    ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,
  Intent)行:2401
    ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,
  Intent)行:2417
    ActivityThread.access $ 2100(ActivityThread,
  ActivityThread $ ActivityRecord,Intent)
  线:116
    ActivityThread $ H.handleMessage(消息)
  线:1794
    ActivityThread $ H(Handler).dispatchMessage(消息)
  行:99 Looper.loop()行:123
    ActivityThread.main(String [])行:
  4203方法.invokeNative(Object,
  Object [],Class,Class [],Class,int,
  布尔值)行:不可用[本地
  方法] Method.invoke(Object,
  对象...)行:521
    ZygoteInit $ MethodAndArgsCaller.run()
  行:791 ZygoteInit.main(String [])
  行:549 NativeStart.main(String [])
  行:不可用[本机方法]

最佳答案

哇,我是个白痴。在我的LinearLayout声明中,它们都包含layout_height属性,而不是必需的android:layout_height属性。我的愚蠢监督,我不会再犯这个错误了。

感谢您抽出宝贵时间来查看DroidIn.net。

关于android - TabActivity/TabWidget的Android错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1905496/

10-10 10:25