Android的编程 – 帖子 6: 施工实践计算器应用
大家好, 在 2 我们收集了之前的所有接口设计相对更多的则. 为了减轻压力,放松一点,那么本文将引导你做出一个完整的应用计算器.
[qads]
我们将使用代码界面设计前夕.
忘了啊, 系统会提示您这个程序做可以快速计算并没有费多大力气, 我们将使用 巴兰库 他们已经建立. 你 这里balan.jar文件下载. 接下来打开工程模式,将文件复制到该文件夹balan.jar应用程序/如图所示库
然后右键单击选中的文件balan.jar 添加为库… 附近的菜单的底部, 该系统将询问是否要为每一个应用程序担心的OK模块来增加. 等一下同步系统完成.
现在你打开文件夹中的文件ActivityMain.java 应用程序/ src目录/主/ JAVA /{包名} 出. 目前,下巴 的setContentView我们drrdf遗体 R.layout.activity_main, 你改变它 R.layout.layout_calculator 连接到您所设计的前一天,计算器界面的文件.
package com.nguyenvanquan7826.tut5linearlayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_calculator); } }
然后确定, 实际上小时开始NHE.
第一, 能够与电脑操纵, 我们需要通过相应的变量在使用Java代码的界面的元素连接.
package com.nguyenvanquan7826.tut5linearlayout; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView tvMath; private TextView tvResult; private int[] idButton = { R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.btnDot, R.id.btnResult, R.id.btnPlus, R.id.btnSub, R.id.btnMul, R.id.btnDiv, R.id.btnC, R.id.btnOpen, R.id.btnClose }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_calculator); connectView(); } private void connectView() { tvMath = (TextView) findViewById(R.id.tvMath); tvResult = (TextView) findViewById(R.id.tvResult); for (int i = 0; i < idButton.length; i++) { findViewById(idButton[i]).setOnClickListener(this); } } @Override public void onClick(View view) { } }
你有没有在连接代码注意和TextView的结果是正常的数学, 按钮连接个人是不正常. 我意识到之所以有这么多的按钮来连接并开始,他们都需要事件. 这样的想法是能够输入数据循环,以重复相同的工作,? 因此,他们有自己的身份证到一个数组 idButton. 每个视图实质性的ID转换为整数类型系统, 所以这个数组类型 INT. 另外,连接并开始在循环中的每个按钮的情况也各不相同. 我们不投刚刚通过指挥链捕获的事件立即连接按钮 findViewById(idButton[在]).setOnClickListener(此);
其原因是,该函数 findViewById 给我们带来了查看 (从那以后,我们通常压在它的真实风格按钮, 的TextView,…) 每个视图功能,可以捕捉Click事件 (其中的TextView, 的EditText,…) 我们是否应该要求立即 setOnClickListener 然后在不上的按钮进行铸造.
现在,下一个任务是处理按钮单击事件. 在这里,我们分头做 3 一种按钮: 按钮数量, 按钮按钮处理数学和数学.
按钮数字和按钮操作,点击任何按钮时, 我们只需要添加相应的表达式文本. 按钮再处理 (按钮C VA =按钮 ) 然后执行计算或清除屏幕. 当您单击按钮,按, 我们呼吁,我们已经添加到原来的库巴兰巴兰对象valueMath, 它会指望我们的结果.
package com.nguyenvanquan7826.tut5linearlayout; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import cachhoc.net.Balan; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView tvMath; private TextView tvResult; private int[] idButton = { R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.btnDot, R.id.btnPlus, R.id.btnSub, R.id.btnMul, R.id.btnDiv, R.id.btnOpen, R.id.btnClose, R.id.btnC, R.id.btnResult }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_calculator); connectView(); } private void connectView() { tvMath = (TextView) findViewById(R.id.tvMath); tvResult = (TextView) findViewById(R.id.tvResult); for (int i = 0; i < idButton.length; i++) { findViewById(idButton[i]).setOnClickListener(this); } init(); } private void init() { tvMath.setText("|"); tvResult.setText("0"); } @Override public void onClick(View view) { int id = view.getId(); // check button number and button operator for (int i = 0; i < idButton.length - 2; i++) { if (id == idButton[i]) { String text = ((Button) findViewById(id)).getText().toString(); // clear char | on top if (tvMath.getText().toString().trim().equals("|")) { tvMath.setText(""); } tvMath.append(text); return; } } // clear screen if (id == R.id.btnC) { init(); return; } // calculation if (id == R.id.btnResult) { cal(); } } private void cal() { String math = tvMath.getText().toString().trim(); if (math.length() > 0) { Balan balan = new Balan(); String result = balan.valueMath(math) + ""; String error = balan.getError(); // check error if (error != null) { tvResult.setText(error); } else { // show result tvResult.setText(result); } } } }
就是这样, 在这里我们的研究结果下线.
亲爱的,如果有对罪的钥匙COS谭柄先生TN
图书馆可以计算正弦DJK(X), COS(X), 黄褐色(X). 你写正常.
泉时,他的哥哥图章 ) = thi`应用和压模设备 , 不知道是什么,先生卡处理
:该
应分别核算正弦余弦艺术谭K A!一个k的明星
在计算者的库中,然后.
他爱凯·塔,当你布局(土地) 只是重新设计的横向视图自己的岗位,应用程序被杀死,但此错误 , 请问如何解决先生
08-01 01:13:12.811 15250-15250/com.example.dell.calculator E / AndroidRuntime: 致命异常: 主
处理: com.example.dell.calculator, PID: 15250
了java.lang.RuntimeException: 无法启动活动ComponentInfo{com.example.dell.calculator / com.example.dell.calculator.MainActivity}: 显示java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3930)
在android.app.ActivityThread.access $ 900(ActivityThread.java:151)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1327)
在android.os.Handler.dispatchMessage(Handler.java:110)
在android.os.Looper.loop(Looper.java:193)
在android.app.ActivityThread.main(ActivityThread.java:5292)
在java.lang.reflect.Method.invokeNative(本地方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:824)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
在dalvik.system.NativeStart.main(本地方法)
产生的原因: 显示java.lang.NullPointerException
在com.example.dell.calculator.MainActivity.connectView(MainActivity.java:42)
在com.example.dell.calculator.MainActivity.onCreate(MainActivity.java:34)
在android.app.Activity.performCreate(Activity.java:5264)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3930)
在android.app.ActivityThread.access $ 900(ActivityThread.java:151)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1327)
在android.os.Handler.dispatchMessage(Handler.java:110)
在android.os.Looper.loop(Looper.java:193)
在android.app.ActivityThread.main(ActivityThread.java:5292)
在java.lang.reflect.Method.invokeNative(本地方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:824)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
在dalvik.system.NativeStart.main(本地方法)
你试图抓住的事件,而不是重定向屏幕离线修复.
谢谢主席先生啧啧
他问我来添加新, 我想抓住人们不进入计算机确实错了,先生, 就像无法进入两个以上标志 . 在 1 号码, 左括号前圆括号未关闭, 不是由数字0被划分… 他们做什么先生
所以,你必须用这个东西和事件onTextChange的EditText当前离线.
库或创建库可用广告
分享您的ZIP PES我的朋友.
电子邮件: nguyenngocluh14@gmail.com
在所有的代码总是NHE. 在所有的接口代码 5, 期待权的头部被发现的所有 5.
有故障的部分OI˚F计算平方根 2 和 %.
– 如果你输入你会发现这样的√4 “字符串输入数学”
– 如果按 50% 人物 % 不追加到TextView的和严格的单独只有一个其它的压.
因此,如何怕先生的错, 期待一个解释.
Ë感谢!
公寓 4 他们是正确的.
哦,让我问一个文件是文件balan.java呵呵balan.jar ?
.jar文件是建立, .是java源文件.
你能告诉我这个错误是什么以及如何解决吗?
“Ç:\Program FilesAndroidAndroid Studiojrebinjava.exe” -代理库:jdwp=传输=dt_socket,地址=127.0.0.1:54743,暂停=y,服务器=n-javaagent:Ç:\UsersAdmin.AndroidStudio4.0systemgroovyHotSwapgragent.jar -javaagent:Ç:\UsersAdmin.AndroidStudio4.0systemcaptureAgentdebugger-agent.jar -Dfile.encoding=windows-1252 -classpath “Ç:\Program FilesAndroidAndroid Studiolibidea_rt.jar” -罐子C:\UsersAdminAndroidStudioProjectsandroid_co_banapplibsbalan.jar
连接到目标虚拟机, 地址: '127.0.0.1:54743“, 运输: '插座’
没有主要清单属性, 在 C:\UsersAdminAndroidStudioProjectsandroid_co_banapplibsbalan.jar
与目标虚拟机断开连接, 地址: '127.0.0.1:54743“, 运输: '插座’
进程以退出代码结束 1
只能debug,但是我看到的另一个是和sockets相关的