LayoutInflater 用于使用 xml 和 View 类

Posted

技术标签:

【中文标题】LayoutInflater 用于使用 xml 和 View 类【英文标题】:LayoutInflater for using xml and View class 【发布时间】:2013-08-16 18:03:24 【问题描述】:

在我问我应该为我的项目使用 XML 还是 View 类之后,你告诉我,我应该在 XML 中做所有可能的事情,其余的使用一个类。你告诉我,用 XML 动画 Sprite 是不可能的,所以我想制作一个 View Class。我得到了谷歌“LayoutInflater”的提示,我做到了。

关于充气机的信息并不多,所以我访问了 android 的开发者数据库并试图了解它是如何工作的。

据我所知,您必须在主游戏活动的 onCreate 方法中添加一些内容(setContentView 必须是 mainXML)。

所以现在我在 mainXML 中创建了一个 LinearLayout,并将其命名为“容器”,并将其作为一个名为“父级”的 ViewGroup。

现在我创建了一个全局变量“private View view”并写下了这一行:

view = LayoutInflater.from(getBaseContext()).inflate(new ViewClass(this), null);

现在的问题是你不能为这样的类充气,我认为我做的整个充气都是错的。

您有什么提示和技巧可以帮助我在我的 mainXML 中使用 LinearLayout 并能够使我的 View Class 中的内容出现在其中吗?

编辑:

让它正常工作,但如果我现在开始我的游戏,什么都不会发生。

这里是代码,如果你有任何解决方案请回答:

    super.onCreate(savedInstanceState);

    // inflate mainXML->
    View mainView = getLayoutInflater().inflate(R.layout.activity_game, null);
    // find container->
    LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);
    // initialize your custom view->
    view = new GameLayout(this);
    // add your custom view to container->
    container.addView(view);

    setContentView(R.layout.activity_game);

还有我的游戏布局:

public GameLayout(Context context) 

    super(context);     


@Override
protected void onDraw(Canvas canvas)

    canvas.drawColor(Color.BLACK);

【问题讨论】:

使用活动上下文而不是getBaseContext()new ViewClass(this) 是什么? 这是一个类,我想在其中对 LinearLayout 的输入进行编码(我知道把它放在那里很愚蠢,但我想让你知道,我正在尝试做什么)跨度> 您的 ViewClass 是否扩展视图? 是的,但 inflate(int, ViewGroup) 不接受。 【参考方案1】:

有两种方法可以解决这个问题。我将向您展示其中之一。在调用setContentView(...) 之前,在您的onCreate(Bundle) 中执行以下操作:

// inflate mainXML
View mainView = getLayoutInflater().inflate(R.layout.mainXML, null);

// find container
LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);

// initialize your custom view
view = new ViewClass(this);

// add your custom view to container
container.addView(view);

最后:

setContentView(mainView);

或者,您可以将自定义视图放在 mainXML 中:

<your.package.name.ViewClass
    android:id="@+id/myCustomView"
    android:layout_
    android:layout_
    .... />

【讨论】:

我对第一个解决方案有点问题。这是我必须做的一切吗?是否会调用 ViewClass 的 onDraw 方法,然后我可以将背景颜色设置为黑色? (canvas.drawColor(Color.BLACK);)?因为如果这是我必须做的所有事情,它就不会这样工作。如果我启动我的应用程序,LinearLayout 会保持白色。 @ChrisDürr 你能把你更新的代码贴在上面吗?我想看看。 我以为我已经按照你说的做了一切,还是我误解了你?感谢您的帮助! @ChrisDürr 你的代码中有setContentView(R.layout.activity_game);。应该是setContentView(mainView);,因为这是我们之前膨胀的视图,并将您的自定义视图添加到其中。 Awww 没有看到这一点,因为我正忙于将 mainXML 内容更改为 activity_game 等。感谢您帮助我,现在一切运行顺利!想我现在明白它是如何工作的,对你有很大帮助!

以上是关于LayoutInflater 用于使用 xml 和 View 类的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 LayoutInflater 与 xml 不同?

Android - LayoutInflater和inflate方法的用法

LayoutInflater的获取与使用

LayoutInflater和inflate()

LayoutInflater

android LayoutInflater使用