<TabHost
android:id="@+id/tabHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
// --------------------------- Here I got warning -------------------------
<LinearLayout
android:id="@+id/chat_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:visibility="visible" >
// --------------------------------------------------------------------------
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white" >
</ListView>
<LinearLayout
android:id="@+id/text_entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:orientation="horizontal" >
<EditText
android:id="@+id/txt_inputText"
android:layout_width="125dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:hint="@string/enter_text"
android:inputType="text" />
<Button
android:id="@+id/btn_Send"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="@string/send" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0" >
</TabWidget>
</LinearLayout>
</TabHost>
如何解决此警告?我找不到任何解决方案。任何帮助将不胜感激。
答案 0 :(得分:5)
我不确定您要完成的是什么,但您可以通过将FrameLayout
内容移至单独的文件并使用{{TabHost
将其添加回<include>
来消除警告1}}标签。
可能的版本可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<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"
android:layout_weight="0" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<include layout="@layout/tab_chat_list" />
</FrameLayout>
</LinearLayout>
</TabHost>
和tab_chat_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@+id/chat_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:visibility="visible" >
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white" >
</ListView>
<LinearLayout
android:id="@+id/text_entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:orientation="horizontal" >
<EditText
android:id="@+id/txt_inputText"
android:layout_width="125dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:hint="@string/enter_text"
android:inputType="text" />
<Button
android:id="@+id/btn_Send"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:text="@string/send" />
</LinearLayout>
</LinearLayout>
</merge>
希望这有帮助。
<强>更新强>
我注意到有些人建议删除FrameLayout
。虽然在其他情况下可以解决问题,TabHost
需要TabWidget
和FrameLayout
才能正常运行。
答案 1 :(得分:2)
你得到的警告就是这个:
UselessParent
摘要:检查是否可以删除父布局。
优先级:2/10严重性:警告类别:性能
包含没有兄弟姐妹的孩子的布局不是滚动视图或者 根布局,并没有背景,可以删除和拥有 它的孩子们直接进入父母那里,享受更多的奉承 高效的布局层次结构。
它可以在Lint中关闭。
更新:我错过了tabhost需要framelayout才能运行。禁用警告或使用鞋鼠解决方案仍应解决问题。 (忽略下面的段落)
假设您不需要FrameLayout(即动态添加内容),您可以尝试删除它并相应地调整LinearLayout:
<LinearLayout
ndroid:id="@+id/chat_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="visible" >
答案 2 :(得分:1)
查看以下布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llParent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rlInner"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some Text" />
</RelativeLayout>
</LinearLayout>
它没有任何问题,任何使用此布局的活动都会毫无问题地运行。但是eclipse会给你一个警告:
此RelativeLayout布局或其LinearLayout父级无效
如您所见,我只需要上面两个容器布局中的一个。添加具有id =“rlInner”的RelativeLayout不会改变布局。当eclipse发现这样的场景时,它会给你一个适当的警告来指示冗余。
在您的方案中,您可以完全丢失FrameLayout而不会打扰布局。这将解决警告。
答案 3 :(得分:1)
为父线性布局添加ID。
它没用,因为父线性布局没有id。这意味着在您遇到错误的线性布局之外的代码中添加内容很困难或不可能。