我必须在其他布局的子项(linearlayout)中设置布局。为此,我将此代码编写在我想要设置为根布局的布局活动中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
**setContentView(R.layout.main);**
/**Define root layout's child where I want to set the layout*/
LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);
/**Inflate this layout and add it to the root layout*/
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View this_layout = inflater.inflate(R.layout.main, null);
inside_menu_view.addView(this_layout);
但我在最后一行inside_menu_view.addView(this_layout);
更新 - 在super.onCreate
之后添加了setContentView()答案 0 :(得分:0)
此行将返回null
,因为您尚未调用setContentView()
LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);
您需要先致电setContentView(R.layout.layout_with_activitycontent);
查找由onCreate(Bundle)中处理的XML中的id属性标识的视图。
返回视图(如果找到)或否则为null。
您尚未使用layout
或使用setContentView()
处理xml LayoutInflater
文件,因此当您尝试return null
时NPE
会导致addView()
像findViewById()
一样调用方法。
修改强>
我不确定你为什么这样做,但你做不到。与上面的链接一样,您只能使用View
在充气layout
内找到View
。您无法使用它在其他未充气的其他layout
内找到layout
。
将setContentView()
文件放在Fragments
中,如果那是您要使用的文件。
不同方法
您可能希望使用<include>
来实现此目的。
See the docs on how to use these
或者您可以使用layout
添加要包含在所有Activities
中的“菜单”Activities
,然后在需要时可以切换layout
显示<include>
的内部部分。
See here about re-using layouts
layout
的示例。您有一些main.xml
要重复使用,比如Activity
,然后在<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="30dp"
android:background="@drawable/blue">
<include layout="@layout/main"
android:id="@+id/main_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- other layouts -->
/<RelativeLayout>
中您要重复使用它,您只需执行类似
{{1}}你的人显然会有所不同,但这是我所拥有的一个例子。希望这会有所帮助。
答案 1 :(得分:0)
假设你的R.layout.main是一个LinearLayout:
<LinearLayout 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"
android:id="@+id/main_layout" >
</LinearLayout>
现在在onCreate():
LinearLayout layout = (LinearLayout) findViewById(R.id.main_layout);
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View this_layout = inflater.inflate(R.layout.main_layout, layout, true);
并且this_layout会自动添加到活动的布局中。