Android 以编程方式添加 ImageView

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23135563/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 06:49:13  来源:igfitidea点击:

Android programmatically add ImageView

androidimageview

提问by Atomix

I just started learning Android programming. I created a new project (API 19) with a blank activity and tried to add an ImageView like this: (in the MainActivity's onCreate() )

我刚开始学习Android编程。我创建了一个带有空白活动的新项目(API 19),并尝试添加这样的 ImageView:(在 MainActivity 的 onCreate() 中)

setContentView(R.layout.activity_main);
View view = (View) findViewById(R.layout.activity_main); 
LinearLayout picLL = new LinearLayout(MainActivity.this);
picLL.layout(0, 0, 100, 100);
picLL.setLayoutParams(new LayoutParams(100, 100));
picLL.setOrientation(LinearLayout.HORIZONTAL);
((ViewGroup) view).addView(picLL); // <- This is line 36
ImageView myImage = new ImageView(this);
myImage.setImageResource(R.drawable.ic_launcher);
picLL.addView(myImage);

However the app crashes immediately after launch. I've tried numerous other answers from Stackoverflow, but none worked. There seems to be something I am missing...

但是,该应用程序在启动后立即崩溃。我已经尝试了 Stackoverflow 的许多其他答案,但都没有奏效。似乎有什么我错过了......

This is the LogCat output:

这是 LogCat 输出:

04-17 10:02:35.611: E/AndroidRuntime(1402): FATAL EXCEPTION: main
04-17 10:02:35.611: E/AndroidRuntime(1402): Process: com.example.test, PID: 1402
04-17 10:02:35.611: E/AndroidRuntime(1402): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.ActivityThread.access0(ActivityThread.java:135)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.os.Looper.loop(Looper.java:136)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at java.lang.reflect.Method.invokeNative(Native Method)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at java.lang.reflect.Method.invoke(Method.java:515)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at dalvik.system.NativeStart.main(Native Method)
04-17 10:02:35.611: E/AndroidRuntime(1402): Caused by: java.lang.NullPointerException
04-17 10:02:35.611: E/AndroidRuntime(1402):     at com.example.test.MainActivity.onCreate(MainActivity.java:36)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.Activity.performCreate(Activity.java:5231)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-17 10:02:35.611: E/AndroidRuntime(1402):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-17 10:02:35.611: E/AndroidRuntime(1402):     ... 11 more
04-17 10:02:38.771: I/Process(1402): Sending signal. PID: 1402 SIG: 9

回答by olegr

It happens because you are trying to find Viewby layout's id.

发生这种情况是因为您试图View通过布局的 id进行查找。

View view = (View) findViewById(R.layout.activity_main); 

You have two options: You can add any id for root element in activity_main.xml. For example it will be root_layout_id. Then you can find it like:

您有两个选择:您可以在activity_main.xml. 例如,它将是root_layout_id. 然后你可以找到它:

View view = (View) findViewById(R.id.root_layout_id); 

The second option is to create layout programatically at all. Change your onCreate() method like this:

第二种选择是完全以编程方式创建布局。像这样改变你的 onCreate() 方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout picLL = new LinearLayout(this);
        picLL.layout(0, 0, 100, 100);
        picLL.setLayoutParams(new LayoutParams(100, 100));
        picLL.setOrientation(LinearLayout.HORIZONTAL);
        ImageView myImage = new ImageView(this);
        myImage.setImageResource(R.drawable.ic_launcher);
        picLL.addView(myImage);
        setContentView(picLL);
    }