Java Android以编程方式包含布局(即不含XML)
所以我创建了一个名为CustomTitlebarActivity的活动子类。基本上,我的应用程序中的每个主要活动都有一个自定义标题栏,其中包含许多常见功能,如主页按钮、标题、搜索按钮等。在我当前的实现中,我仍然在布局XML中为每个自定义标题栏活动显式使用一个include语句:Java Android以编程方式包含布局(即不含XML),java,android,include,Java,Android,Include,所以我创建了一个名为CustomTitlebarActivity的活动子类。基本上,我的应用程序中的每个主要活动都有一个自定义标题栏,其中包含许多常见功能,如主页按钮、标题、搜索按钮等。在我当前的实现中,我仍然在布局XML中为每个自定义标题栏活动显式使用一个include语句: <include layout="@layout/titlebar" /> 我应该能够在CustomTitlebarActivity中这样做,这似乎很自然。我有两个问题:什么代码可以替换这个includ
<include layout="@layout/titlebar" />
我应该能够在CustomTitlebarActivity中这样做,这似乎很自然。我有两个问题:什么代码可以替换这个include标记,我应该把代码放在哪里?(我的第一反应是将它放在CustomTitlebarActivity的setContentView方法中。)
另一方面,我希望能够深入了解重用android UI代码的更好方法(即使标题栏本身需要在不同活动之间略有不同)。就我个人而言,我可能会将我的
活动
子类编写为始终设置内容视图
到一个布局文件,其中包含一个垂直填充父项
线性布局
仅包含我的标题栏:-
<LinearLayout android:id="@+id/custom_titlebar_container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!--titlebar here-->
</LinearLayout>
或者,您可以使用抽象方法来获取内容区域,使其返回一个
视图,而不是int
,从而使您能够更灵活地动态构建视图(但强制您自己在简单的示例中膨胀视图,只需在此处转储此XML布局即可)。我也遇到了这个问题,我现在就解决了。我认为我的解决方案更简单:
创建充气机:
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
为子布局充气:
View childLayout = inflater.inflate(R.layout.child,
(ViewGroup) findViewById(R.id.child_id));
将其添加到父级:
parentLayout.addView(childLayout);
完成了,享受吧 这个配置成功了,我将用它做更多的实验。关于如何允许在这种标题栏上安排不同的操作按钮,有什么好主意吗?这要看情况而定,但是如果有有限的可预测的定制(一个或两个自定义按钮/操作),我可能会坚持使用“由子类覆盖的抽象方法来获得要使用的图像和要执行的操作”之类的方法(就像一个抽象的getFirstActionImageResourceId(),onFirstActionClicked())并将它们挂在基类的onCreate()中。我认为准确的答案应该是findViewById(R.id.child_id))代码>不R.layout.child\u id
当我这样做时,宽度似乎不符合布局中的定义。不知道为什么
parentLayout.addView(childLayout);