Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android以编程方式包含布局(即不含XML)_Java_Android_Include - Fatal编程技术网

Java Android以编程方式包含布局(即不含XML)

Java Android以编程方式包含布局(即不含XML),java,android,include,Java,Android,Include,所以我创建了一个名为CustomTitlebarActivity的活动子类。基本上,我的应用程序中的每个主要活动都有一个自定义标题栏,其中包含许多常见功能,如主页按钮、标题、搜索按钮等。在我当前的实现中,我仍然在布局XML中为每个自定义标题栏活动显式使用一个include语句: <include layout="@layout/titlebar" /> 我应该能够在CustomTitlebarActivity中这样做,这似乎很自然。我有两个问题:什么代码可以替换这个includ

所以我创建了一个名为CustomTitlebarActivity的活动子类。基本上,我的应用程序中的每个主要活动都有一个自定义标题栏,其中包含许多常见功能,如主页按钮、标题、搜索按钮等。在我当前的实现中,我仍然在布局XML中为每个自定义标题栏活动显式使用一个include语句:

<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);