对于我正在设计的应用程序,我们必须处理用户的一些“特殊”需求。其中之一是创建一个必须出现在几乎所有活动中的导航侧边栏。
此导航栏必须包含指向三个活动的相同三个按钮:HOME,INFO,CONFIGURATION。
这三项活动中的每一项都可以加载其他可以(或不能)包含此导航栏的活动。 这些按钮中的每一个都必须重置当前活动堆栈状态,从而将用户选择的相应活动置于顶部。
导航栏必须可自定义(可见/不可见),我还想停用一些按钮。
编辑:它必须类似于抽屉,但按钮必须是高度可定制的(尺寸和外观),并且必须始终打开(没有滑动功能)。
如果不在每个布局中手动包含这些按钮,实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
您可以在ActivityBase
课程中手动创建此布局,但只能创建一次。其他活动可以扩展这个基类。
修改强>
正如我所说,我正在改进我的答案。
所以我的想法是创建一个带有菜单的Activity
。如果其他Activity
需要具有相同的菜单,则可以扩展此ActivityBase
并添加它自己的布局。
让我们看一个简单的例子。
ActivityBase
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<RelativeLayout
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@android:color/black" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Button" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button1"
android:layout_centerHorizontal="true"
android:text="Button" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button2"
android:layout_alignBottom="@+id/button2"
android:layout_alignParentRight="true"
android:text="Button" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/menu" >
</RelativeLayout>
</RelativeLayout>
正如您所看到的,我创建了一个简单的布局,其中包含菜单栏和容器,用于来自将展开AcivityBase
的活动的布局。
现在ActivityBase
:
public class ActivityBase extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
}
}
这是一个简单的Activity
,但是如果你愿意,你也可以在这里放置菜单事件处理,如果它们对于将扩展它的所有活动都是相同的。
现在让我们看看SecondActivity's
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
这是一个正常的布局,没什么特别的。为了这个例子的目的,我在那里放了一些控件。
SecondActivity
课程:
public class SecondActivity extends MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = getLayoutInflater();
inflater.inflate(R.layout.second_activity, (ViewGroup) findViewById(R.id.container));
}
}
它扩展了ActivityBase
,重要的是 - 不致电setContentView
。相反,我们正在创建LayoutInflater
,并且我们在second_activity
布局中创建的container
中夸大了activity_base
布局。