如何为所有活动创build一个通用的Android XML布局

我有一个应用程序需要在每个屏幕上相同的项目[5个button作为制表符]。 是否有可能创build一个具有这5个button的“基本XML布局”,然后让所有其他XML文件以某种方式从bas布局扩展,以便我不必拥有多个最终具有相同function的button。

有没有更好的方法来解决这个问题,可以通过API 9来支持

Solutions Collecting From Web of "如何为所有活动创build一个通用的Android XML布局"

为您的基本活动创build一个通用布局。 然后使用<include>标签在所有布局中包含该布局,以便使其相同。

之后,创build一个抽象活动,然后处理该活动中button和代码的所有点击,然后在包含基本布局的所有其他活动中扩展此活动。

例如

常用buttonxml布局

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/tabhost_bg" android:gravity="center" android:orientation="horizontal" android:weightSum="3"> <Button android:id="@+id/btnHome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bottom_btn_active" android:layout_weight="1" android:text="@string/label_home" style="@style/bottom_tab_btn"/> <Button android:id="@+id/btnSetting" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bottom_btn_active" android:layout_weight="1" android:text="@string/label_settings" style="@style/bottom_tab_btn"/> <Button android:id="@+id/btnMore" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bottom_btn_active" android:layout_weight="1" android:text="@string/label_more" style="@style/bottom_tab_btn"/> </LinearLayout> 

这是一个xml布局,您可以在其中包含上面的XML文件

 <include android:id="@+id/bottombar" android:layout_width="fill_parent" android:layout_height="wrap_content" layout="@layout/bottom_bar" /> 

这里android:layout_width和android:layout_height和layout是强制属性

现在这里是一个基本的活动,处理公共控制点击

 public abstract class BottomBar extends Activity implements OnClickListener { protected Button btnHome; Button btnSetting, btnMore; private Activity mActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = this; } protected void mappingWidgets() { btnHome = (Button) findViewById(R.id.btnHome); btnSetting = (Button) findViewById(R.id.btnSetting); btnMore = (Button) findViewById(R.id.btnMore); btnHome.setOnClickListener(this); btnSetting.setOnClickListener(this); btnMore.setOnClickListener(this); } @Override public void onClick(View v) { if (v == null) throw new NullPointerException( "You are refering null object. " + "Please check weather you had called super class method mappingWidgets() or not"); if (v == btnHome) { } else if (v == btnSetting) { }else if(v == btnMore) { } } protected void handleBackgrounds(View v) { if (v == btnHome) { btnHome.setBackgroundResource(R.drawable.bottom_btn_hover); btnSetting.setBackgroundResource(R.drawable.bottom_btn_active); btnMore.setBackgroundResource(R.drawable.bottom_btn_active); } else if (v == btnSetting) { btnHome.setBackgroundResource(R.drawable.bottom_btn_active); btnSetting.setBackgroundResource(R.drawable.bottom_btn_hover); btnMore.setBackgroundResource(R.drawable.bottom_btn_active); } else if (v == btnMore) { btnHome.setBackgroundResource(R.drawable.bottom_btn_active); btnSetting.setBackgroundResource(R.drawable.bottom_btn_active); btnMore.setBackgroundResource(R.drawable.bottom_btn_hover); } } } 

现在剩下的一步就是在你所有的活动中扩展这个Base活动。

您可以使用extends关键字扩展活动中的Base活动。 例如

 public class MyActivity extends BottomBar 

注意:从孩子的活动你必须调用基类的超级方法来处理你的基础布局的公共控制点击。

因此,您可以在单一活动中实施多种常见布局。

希望这会帮助你。 请享用!!

您可能需要查看<include>标签。 它实际上需要一个您创build的xml,并将其复制并粘贴到其他布局中。

所以你要做的是用你的button创build一个布局。 把它们放在一个<merge>标签之间,这样它们不会创build一个FrameLayout来放置。然后使用<include>标签在其他布局中使用相同的布局。

注意: 在使用<include>标记时,请始终覆盖layout_widthlayout_height属性。 即使您在相同的值时覆盖它们,情况也是如此。 如果您没有覆盖这些属性,那么以前版本的Android中会存在一个错误,它会忽略某些属性。

包括将是要走的路,但我从来没有得到这个工作可靠我自己。 也许我做错了什么,但编译器并不总是在合并的布局中挑选ID。