在编码中使用ImageView设置图像

时间:2013-08-05 18:53:24

标签: android imageview

下面是我的代码,这关闭了应用程序,因为我在我的课程中设置了图像。这有什么不妥?更轻松地加载图像?

public static class FiveSkills extends Activity{
    ImageView img = (ImageView) findViewById(R.id.img);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image);
        img.setImageResource(R.drawable.five_skills);
    }
}

XML布局

<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:id="@+id/img"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="59dp"
    />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="15dp"
    android:text="Five Skills"
    android:textColor="#08088A"
    android:textAppearance="?android:attr/textAppearanceLarge" />

2 个答案:

答案 0 :(得分:3)

这里的问题是,当你使用方法findViewById(R.id.img)时,你的视图可能甚至还没有膨胀,为了使代码工作,在setContentView之后获取图像的参考叫,像这样:

ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.image);
    img = (ImageView) findViewById(R.id.img);
    img.setImageResource(R.drawable.five_skills);
}

跳这有帮助。

问候!

答案 1 :(得分:1)

获取子视图的最佳方法是一旦父进程膨胀。这是你获得"ANR"的唯一原因。

似乎你把Java抓取变量的概念混淆在类旁边并使其成为全局变量。完全正确,这是我们总是这样做的。但是从XML Layout文件中获取视图时。您需要在Activity下的onCreate()开头对其进行充气。看看你工作的事物的生命周期总是更好。所以请去Life Cycle of Activity仅供参考。

您的代码看起来像这样:

public static class FiveSkills extends Activity
{
   protected void onCreate(Bundle savedInstanceState)
   {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.image);
    ImageView img = (ImageView) findViewById(R.id.img); // Inflate child view once your parentview is available.
    img.setImageResource(R.drawable.five_skills);
   }
}  

获得将在Activity中使用的布局文件。之后,您就可以下拉布局子视图了。