我希望在每个页面的应用程序中都有一个通用的底部菜单栏。我已经设计了底部栏,但我对菜单图标的 onClick 事件感到困惑。我是否必须为每个活动类编写 onClick 侦听器的代码以使栏可见并在每个页面中工作,或者是否有任何其他方式我可以创建一个位于每个页面的公共底部栏,而无需在每个页面中编写菜单代码活动课。
我试图通过创建一个基类并将其扩展到其他子类来创建,如 dave.c 在Android 创建底部栏菜单的帖子中所述,但它对我不起作用。请建议。谢谢。
我希望在每个页面的应用程序中都有一个通用的底部菜单栏。我已经设计了底部栏,但我对菜单图标的 onClick 事件感到困惑。我是否必须为每个活动类编写 onClick 侦听器的代码以使栏可见并在每个页面中工作,或者是否有任何其他方式我可以创建一个位于每个页面的公共底部栏,而无需在每个页面中编写菜单代码活动课。
我试图通过创建一个基类并将其扩展到其他子类来创建,如 dave.c 在Android 创建底部栏菜单的帖子中所述,但它对我不起作用。请建议。谢谢。
简单示例(如 dave.c 建议的那样):
public class BaseActivity extends Activity {
public void onClickButton1(View view) {
Toast toast = Toast.makeText(this, "Button 1 clicked", Toast.LENGTH_SHORT);
toast.show();
}
public void onClickButton2(View view) {
Intent i = new Intent(this, MyFirstActivity.class);
startActivity(i);
}
public void onClickButton3(View view) {
Intent i = new Intent(this, MySecondActivity.class);
startActivity(i);
}
}
您的 MyFirstActivity 将如下所示:
public class MyFirstActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_first_activity);
}
}
您的 MySecondActivity 活动:
public class MySecondActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_second_activity);
}
}
在 my_first_activity.xml 布局中,您包括:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="My first activity" android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<include android:layout_width="fill_parent" android:layout_height="wrap_content"
layout="@layout/bottom_bar" />
</LinearLayout>
在 my_second_activity.xml 中:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="My second activity" android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<include android:layout_width="fill_parent" android:layout_height="wrap_content"
layout="@layout/bottom_bar" />
</LinearLayout>
在 bottom_bar 中,您使用 onClick 处理程序定义按钮:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:text="Button1" android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClickButton1"/>
<Button android:text="Button2" android:id="@+id/button2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClickButton2"/>
<Button android:text="Button3" android:id="@+id/button3" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClickButton3"/>
</LinearLayout>
您可能会在使用此设计时遇到问题。例如,当您想在某些活动中使用 ListView 并且您想继承 ListActivity(TabActivity 是另一个示例)时,这是不可能的。
另一种方法是继承 Activity 并定义一个处理 onClick 事件的通用处理程序。在这种情况下,您需要在每个活动中定义 onClick 处理程序并调用相应的公共处理程序的方法。
还有一种方法是使用 TabHost 和 TabActivity。