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相关的