将 PNG 文件放在哪里以及如何从 XML 布局中的 ImageView 引用它们?

Ale*_*ber 4 android android-assets android-imageview

在阅读了 2 本书关于 Android 编程之后,我正在尝试移植一个 iOS 文字游戏应用程序:

文字游戏截图

我想有 2 个继承自View- SmallTile.javaBigTile.java 的类

这两个类都应该由一个ImageView(id: "image") 和 2 TextViews(ids: "letter" 和 "value") 组成。

它们之间的区别在于 BigTile 可以拖动并且它的“图像”有阴影。

我已将图形资产放入目录res/drawable-mdpi 中,我试图从布局文件res/layout/small_tile.xmlres/layout/big_tile.xml 中将它们引用为:

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/small_tile.png" >
</ImageView>
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

找不到与给定名称匹配的资源(在 'src' 处,值为 '@drawable/small_tile.png')

正如您在 Eclipse 屏幕截图中看到的(这里是全屏):

日食截图

我也为我的资产尝试了其他路径 - 例如res/drawablessrc/assets.

还有另一个问题:如何从View?

只有一个ImageViewRES /布局/ small_tile.xml的权利,但我想补充两个TextView那儿太(为信及其数值) -然后从加载它SmallTile.java

从我知道如何从载入一个布局的编程书籍ActivityFragment-通话setContentView(R.layout.activity_main);onCreate-但在那里,什么在叫View类?

Tan*_*.7x 6

当引用 Drawables 时,你只能通过它们的文件名来引用它们。您应该省略扩展名。

例如,您发布的 ImageView 在 XML 中应如下所示:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/small_tile" >
Run Code Online (Sandbox Code Playgroud)

注意从android:src="@drawable/small_tile.png"android:src="@drawable/small_tile"

要在视图中使用自定义布局,您需要创建一个LayoutInflater并调用inflate(R.id.my_layout, this);. 例如:

public SmallTile(Context context) {
    LayoutInflater inflater = LayoutInflater.from(context);
    inflater.inflate(R.layout.my_view_layout, this);
}
Run Code Online (Sandbox Code Playgroud)