我正在尝试为我的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/