我已经完成的工作:
我正在寻找的内容:
我不关心设计,但我不知道如何使用类似于第二张图片的线将按钮连接到主按钮。 注意:我是动态创建按钮的。因此,我不使用XML文件,因为我不知道会有多少行/按钮。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
//
RelativeLayout FirstLayout = (RelativeLayout)findViewById(R.id.second_layou);
RelativeLayout.LayoutParams parms1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Button yourButton = new Button(this);
yourButton.setText("1");
yourButton.setWidth(2);
parms1.setMargins(w, h+250, 0, 0);
FirstLayout.addView(yourButton, parms1);
//
RelativeLayout.LayoutParams parms2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Button yourButton2 = new Button(this);
yourButton2.setText("2");
yourButton2.setWidth(2);
parms2.setMargins(w-300, h+300, 0, 0);
FirstLayout.addView(yourButton2, parms2);
// and so on with other buttons
编辑:
首先: 我尝试了这个答案,将以下代码添加到onCreate()
的末尾:
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
一条线视图被显示出来了,但是按钮却消失了!我想让这条线从MAIN
按钮的中心点到其他按钮的中心点绘制,而不是从固定点开始。
第二个问题:当我在定义按钮之前添加相同的代码时,会出现运行时错误,以下是日志记录:
01-29 15:25:25.956 26170-26170/com.example.user.raywenderlich E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.user.raywenderlich, PID: 26170 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.raywenderlich/com.example.user.raywenderlich.SecondActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View, android.view.ViewGroup$LayoutParams)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View, android.view.ViewGroup$LayoutParams)' on a null object reference
at com.example.user.raywenderlich.SecondActivity.onCreate(SecondActivity.java:46)
at android.app.Activity.performCreate(Activity.java:5958)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
import subprocess # 运行ls命令并将结果存储在result变量中 result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE) # 打印结果 print(result.stdout.decode('utf-8'))
在这个例子中,我们使用subprocess.run()
函数来运行ls -l
命令,并将结果存储在result
变量中。然后,我们使用print()
函数打印结果。请注意,subprocess.run()
函数返回一个CompletedProcess
对象,该对象包含有关进程的信息,例如退出代码和输出。在上面的例子中,我们使用stdout=subprocess.PIPE
参数将输出重定向到管道,以便我们可以在程序中访问它。最后,我们使用decode('utf-8')
方法将字节字符串转换为Unicode字符串,以便我们可以正确地打印它。 - Gueorgui ObregonfindViewById(R.id.second_layou)
返回 null,因为它在您为 Activity 定义的内容视图中找不到该 ID。可能是因为您已经执行了setContentView(drawView);
,这意味着findViewById
将不再起作用。 - OneCricketeersetContentView(R.layout.second_layout);
。 - OneCricketeer