Java 布局和子类
(我不熟悉Android和Java,所以请原谅任何不正确的措辞和术语。我尽我所能理解) 我创建了一个名为Java 布局和子类,java,android,android-linearlayout,subclass,Java,Android,Android Linearlayout,Subclass,(我不熟悉Android和Java,所以请原谅任何不正确的措辞和术语。我尽我所能理解) 我创建了一个名为game\u activity.xml的布局。然后在classGame中,在onCreate中,我将内容视图设置为Game\u activity: public class Game extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.
game\u activity.xml
的布局。然后在classGame
中,在onCreate
中,我将内容视图设置为Game\u activity
:
public class Game extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
}
//...code
//...code
}
我还创建了一个子类
容器
,它扩展了线性布局
:
private class Container extends LinearLayout {
public Container(Context context) {
super(context);
}
//...code
//...code
}
在game\u activity.xml
中,有一个名为mainLayout
的LinearLayout
。我希望mainLayout
成为Container
的一部分,但我不知道如何正确实现它。
我试过这样的方法:
public class Game extends Activity {
private LinearLayout mainLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
mainLayout = new Container(getApplicationContext());
}
private class Container extends LinearLayout {
public Container(Context context) {
super(context);
}
//... code
//... code
}
}
但这种方法不起作用。如何使mainloayout
成为Container
类的一部分
提前感谢您只需在现有的线性布局中添加线性布局即可
因此,正如您的问题所述,您需要将mainLayout LinearLayout作为容器(Linear Layout类的子类)的一部分
您可以简单地将容器布局添加到Xml文件中,然后通过编程将主布局线性布局添加到容器布局中
然后,为了访问容器类中的内部LinearLayout,您只需在添加的mainLayout对象上放置一些标记,然后通过遍历子对象并找到具有关联标记的子布局来访问容器类中的mainLayout对象
我希望这能有所帮助。在您的game\u activity.xml
中,您需要的不是
标记,而是
标记。您可以在AndroidManifest.xml
中找到您的包名
然后,要在游戏
中获取对容器
的引用,代码如下所示:
public class Game extends Activity {
private Container mainLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
mainLayout = (Container) findViewById(R.id.mainLayout);
}
private static class Container extends LinearLayout {
public Container(Context context) {
super(context);
}
//... code
//... code
}
}
<com.YOUR_PACKAGE_NAME.Container
attributes...>
<LinearLayout
attributes...>
<SomeRandomView
attributes... />
</LinearLayout>
</com.YOUR_PACKAGE_NAME.Container>
请注意,您可能应该考虑将容器
移动到它自己的文件中。否则,您必须将其设置为静态类。此外,当获取对xml中布局对象的引用时,您不必自己构造它们,因为Android将构造实例作为布局过程的一部分
编辑:对不起,误读了问题。要在容器
类中设置线性布局
,您的游戏活动.xml应如下所示:
public class Game extends Activity {
private Container mainLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
mainLayout = (Container) findViewById(R.id.mainLayout);
}
private static class Container extends LinearLayout {
public Container(Context context) {
super(context);
}
//... code
//... code
}
}
<com.YOUR_PACKAGE_NAME.Container
attributes...>
<LinearLayout
attributes...>
<SomeRandomView
attributes... />
</LinearLayout>
</com.YOUR_PACKAGE_NAME.Container>
非常感谢您的详细和具体回答。我想这正是我需要的。我现在要测试一下,看看它是否有效。在xml中,我收到以下通知:渲染期间引发的异常:com.android.layoutlib.bridge.MockView无法强制转换到android.view.ViewGroup异常详细信息记录在窗口>显示视图>错误日志中无法找到以下类:-com.example.hello\u world.Container(修复生成路径、编辑XML、创建类)你知道为什么吗?你的容器类是否在它自己的文件中,名为Container.java
?我建议使用诸如AndroidStudio之类的IDE,它会尝试猜测你要添加哪个自定义类,因为键入完整的包名和路径很快会让人厌烦。如何将容器布局添加到我的xml中?