Android 开发笔记___初级控件之实战__计算器

Posted alm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 开发笔记___初级控件之实战__计算器相关的知识,希望对你有一定的参考价值。

 

功能简单,实现并不难,对于初学者可以总和了解初级控件的基本使用。

  用到的知识点如下:

  • 线性布局 LinearLayout:整体界面是从上往下的,因此需要垂直方向的linearlayout;下面每行四个按钮,需要水平的linearlayout。
  • 滚动视图 ScrollView    :虽然界面不宽也不高,以防万一,有可能会遇到屏幕特别小的手机,因此用一个垂直方向的scrollview。
  • 文本视图 TextView      :上面标题就是一个textview,结果显示也是textview,但是更高级。能够从下往上滚动,前面的聊天室效果里用到过。
  • 按钮  Button                :下面的数字、运算符都是按钮。
  • 图像视图 ImageView  :未用到。
  • 图像按钮 ImageButton :由于开根号运算符(√)虽然可以打出来,但是有点不一样,因此需要用到一个图像,就用到了图像按钮。
  • 状态列表图形              :都有按下和弹起两种状态,因此订制了按钮的自定义样式。
  • 形状图形                :运算结果用到的textview是一个圆角的矩形,所以定义了shape文件,把它作为文本视图的背景。
  • 九宫格图片                 :最下面的“0”按钮是有点大,因此需要两倍那么大的图片,如果使用普通的图片则会拉宽,效果很不好。因此就用到了。

style

 1 <resources>
 2 
 3     <!-- Base application theme. -->
 4     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5         <!-- Customize your theme here. -->
 6         <item name="colorPrimary">@color/colorPrimary</item>
 7         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8         <item name="colorAccent">@color/colorAccent</item>
 9     </style>
10     <style name="btn_cal">
11         <item name="android:layout_width">0dp</item>
12         <item name="android:layout_height">match_parent</item>
13         <item name="android:layout_weight">1</item>
14         <item name="android:gravity">center</item>
15         <item name="android:textColor">@color/black</item>
16         <item name="android:textSize">30sp</item>
17         <item name="android:background">@drawable/btn_nine_selector</item>
18     </style>
19 
20 </resources>

xml

  1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2     android:layout_width="match_parent"
  3     android:layout_height="match_parent"
  4     android:padding="5dp"
  5     android:gravity="top|center"
  6     android:orientation="vertical">
  7 
  8     <ScrollView
  9         android:layout_width="match_parent"
 10         android:layout_height="wrap_content">
 11 
 12         <LinearLayout
 13             android:layout_width="match_parent"
 14             android:layout_height="wrap_content"
 15             android:orientation="vertical">
 16 
 17             <TextView
 18                 android:layout_width="match_parent"
 19                 android:layout_height="wrap_content"
 20                 android:gravity="center"
 21                 android:text="简单计算器"
 22                 android:textColor="#000000"
 23                 android:textSize="22sp" />
 24 
 25             <LinearLayout
 26                 android:layout_width="match_parent"
 27                 android:layout_height="wrap_content"
 28                 android:background="@drawable/shape_white_with_stroke"
 29                 android:orientation="vertical">
 30 
 31                 <TextView
 32                     android:id="@+id/tv_result"
 33                     android:layout_width="match_parent"
 34                     android:layout_height="wrap_content"
 35                     android:gravity="right|bottom"
 36                     android:lines="3"
 37                     android:maxLines="3"
 38                     android:scrollbars="vertical"
 39                     android:textColor="#000000"
 40                     android:textSize="25sp" />
 41             </LinearLayout>
 42 
 43             <LinearLayout
 44                 android:layout_width="match_parent"
 45                 android:layout_height="wrap_content"
 46                 android:orientation="vertical">
 47 
 48                 <LinearLayout
 49                     android:layout_width="match_parent"
 50                     android:layout_height="75dp"
 51                     android:orientation="horizontal">
 52 
 53                     <Button
 54                         android:id="@+id/btn_cancel"
 55                         style="@style/btn_cal"
 56                         android:text="CE" />
 57 
 58                     <Button
 59                         android:id="@+id/btn_divide"
 60                         style="@style/btn_cal"
 61                         android:text="÷" />
 62 
 63                     <Button
 64                         android:id="@+id/btn_multiply"
 65                         style="@style/btn_cal"
 66                         android:text="×" />
 67 
 68                     <Button
 69                         android:id="@+id/btn_clear"
 70                         style="@style/btn_cal"
 71                         android:text="C" />
 72                 </LinearLayout>
 73 
 74                 <LinearLayout
 75                     android:layout_width="match_parent"
 76                     android:layout_height="75dp"
 77                     android:orientation="horizontal">
 78 
 79                     <Button
 80                         android:id="@+id/btn_seven"
 81                         style="@style/btn_cal"
 82                         android:text="7" />
 83 
 84                     <Button
 85                         android:id="@+id/btn_eight"
 86                         style="@style/btn_cal"
 87                         android:text="8" />
 88 
 89                     <Button
 90                         android:id="@+id/btn_nine"
 91                         style="@style/btn_cal"
 92                         android:text="9" />
 93 
 94                     <Button
 95                         android:id="@+id/btn_plus"
 96                         style="@style/btn_cal"
 97                         android:text="+" />
 98                 </LinearLayout>
 99 
100                 <LinearLayout
101                     android:layout_width="match_parent"
102                     android:layout_height="75dp"
103                     android:orientation="horizontal">
104 
105                     <Button
106                         android:id="@+id/btn_four"
107                         style="@style/btn_cal"
108                         android:text="4" />
109 
110                     <Button
111                         android:id="@+id/btn_five"
112                         style="@style/btn_cal"
113                         android:text="5" />
114 
115                     <Button
116                         android:id="@+id/btn_six"
117                         style="@style/btn_cal"
118                         android:text="6" />
119 
120                     <Button
121                         android:id="@+id/btn_minus"
122                         style="@style/btn_cal"
123                         android:text="-" />
124                 </LinearLayout>
125 
126                 <LinearLayout
127                     android:layout_width="match_parent"
128                     android:layout_height="75dp"
129                     android:orientation="horizontal">
130 
131                     <Button
132                         android:id="@+id/btn_one"
133                         style="@style/btn_cal"
134                         android:text="1" />
135 
136                     <Button
137                         android:id="@+id/btn_two"
138                         style="@style/btn_cal"
139                         android:text="2" />
140 
141                     <Button
142                         android:id="@+id/btn_three"
143                         style="@style/btn_cal"
144                         android:text="3" />
145 
146                     <ImageButton
147                         android:id="@+id/ib_sqrt"
148                         android:layout_width="0dp"
149                         android:layout_height="match_parent"
150                         android:layout_weight="1"
151                         android:scaleType="centerInside"
152                         android:src="@drawable/sqrt"
153                         android:background="@drawable/btn_nine_selector"/>
154                 </LinearLayout>
155 
156                 <LinearLayout
157                     android:layout_width="match_parent"
158                     android:layout_height="75dp"
159                     android:orientation="horizontal">
160 
161                     <Button
162                         android:id="@+id/btn_zero"
163                         style="@style/btn_cal"
164                         android:layout_weight="2"
165                         android:text="0" />
166 
167                     <Button
168                         android:id="@+id/btn_dot"
169                         style="@style/btn_cal"
170                         android:text="." />
171 
172                     <Button
173                         android:id="@+id/btn_equal"
174                         style="@style/btn_cal"
175                         android:text="=" />
176                 </LinearLayout>
177             </LinearLayout>
178         </LinearLayout>
179     </ScrollView>
180 
181 </LinearLayout>

 

nineselec0tor

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
4     <item android:drawable="@drawable/button_normal" />
5 </selector>

putong

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <item android:state_pressed="true" android:drawable="@drawable/button_pressed_orig" />
4     <item android:drawable="@drawable/button_normal_orig" />
5 </selector>0

shape_oval

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:shape="oval" >
 4 
 5     <solid android:color="#ff66aa" />
 6 
 7     <stroke
 8         android:width="1dp"
 9         android:color="#ffaaaaaa" />
10 
11 </shape>

rect

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
 3 
 4     <solid android:color="#ffdd66" />
 5 
 6     <stroke
 7         android:width="1dp"
 8         android:color="#ffaaaaaa" />
 9 
10     <corners
11         android:bottomLeftRadius="10dp"
12         android:bottomRightRadius="10dp"
13         android:topLeftRadius="10dp"
14         android:topRightRadius="10dp" />
15 
16 </shape>

white_stroke

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
 3 
 4     <solid android:color="#ffffff" />
 5 
 6     <stroke
 7         android:width="1dp"
 8         android:color="#bbbbbb" />
 9 
10     <corners
11         android:bottomLeftRadius="10dp"
12         android:bottomRightRadius="10dp"
13         android:topLeftRadius="10dp"
14         android:topRightRadius="10dp" />
15 
16 </shape>

main

  1 package com.example.alimjan.hello_world;
  2 
  3 import android.app.Activity;
  4 import android.content.Context;
  5 import android.content.Intent;
  6 import android.os.Bundle;
  7 import android.support.annotation.Nullable;
  8 
  9 /**
 10  * Created by alimjan on 7/1/2017.
 11  */
 12 
 13         import android.support.v7.app.AppCompatActivity;
 14         import android.text.method.ScrollingMovementMethod;
 15         import android.util.Log;
 16         import android.view.View;
 17         import android.widget.TextView;
 18         import android.widget.Toast;
 19 
 20 import com.example.alimjan.hello_world.Arith;
 21 
 22 
 23 public class class__2_5 extends AppCompatActivity implements View.OnClickListener {
 24 
 25     private final static String TAG = "CalculatorActivity";
 26     private TextView tv_result;
 27 
 28     @Override
 29     protected void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.code_2_5);
 32         tv_result = (TextView) findViewById(R.id.tv_result);
 33         tv_result.setMovementMethod(new ScrollingMovementMethod());
 34 
 35         findViewById(R.id.btn_cancel).setOnClickListener(this);
 36         findViewById(R.id.btn_divide).setOnClickListener(this);
 37         findViewById(R.id.btn_multiply).setOnClickListener(this);
 38         findViewById(R.id.btn_clear).setOnClickListener(this);
 39         findViewById(R.id.btn_seven).setOnClickListener(this);
 40         findViewById(R.id.btn_eight).setOnClickListener(this);
 41         findViewById(R.id.btn_nine).setOnClickListener(this);
 42         findViewById(R.id.btn_plus).setOnClickListener(this);
 43         findViewById(R.id.btn_four).setOnClickListener(this);
 44         findViewById(R.id.btn_five).setOnClickListener(this);
 45         findViewById(R.id.btn_six).setOnClickListener(this);
 46         findViewById(R.id.btn_minus).setOnClickListener(this);
 47         findViewById(R.id.btn_one).setOnClickListener(this);
 48         findViewById(R.id.btn_two).setOnClickListener(this);
 49         findViewById(R.id.btn_three).setOnClickListener(this);
 50         findViewById(R.id.btn_zero).setOnClickListener(this);
 51         findViewById(R.id.btn_dot).setOnClickListener(this);
 52         findViewById(R.id.btn_equal).setOnClickListener(this);
 53         findViewById(R.id.ib_sqrt).setOnClickListener(this);
 54     }
 55 
 56     @Override
 57     public void onClick(View v) {
 58         int resid = v.getId();
 59         String inputText;
 60         if (resid == R.id.ib_sqrt) {
 61             inputText = "√";
 62         } else {
 63             inputText = ((TextView) v).getText().toString();
 64         }
 65         Log.d(TAG, "resid="+resid+",inputText="+inputText);
 66         if (resid == R.id.btn_clear) {
 67             clear("");
 68         } else if (resid == R.id.btn_cancel) {
 69             if (operator.equals("") == true) {
 70                 if (firstNum.length() == 1) {
 71                     firstNum = "0";
 72                 } else if (firstNum.length() > 0) {
 73                     firstNum = firstNum.substring(0, firstNum.length() - 1);
 74                 } else {
 75                     Toast.makeText(this, "没有可取消的数字了", Toast.LENGTH_SHORT).show();
 76                     return;
 77                 }
 78                 showText = firstNum;
 79                 tv_result.setText(showText);
 80             } else {
 81                 if (nextNum.length() == 1) {
 82                     nextNum = "";
 83                 } else if (nextNum.length() > 0) {
 84                     nextNum = nextNum.substring(0, nextNum.length() - 1);
 85                 } else {
 86                     Toast.makeText(this, "没有可取消的数字了", Toast.LENGTH_SHORT).show();
 87                     return;
 88                 }
 89                 showText = showText.substring(0, showText.length() - 1);
 90                 tv_result.setText(showText);
 91             }
 92   

以上是关于Android 开发笔记___初级控件之实战__计算器的主要内容,如果未能解决你的问题,请参考以下文章

Python实战之int学习笔记及简单练习

Python实战之set学习笔记及简单练习

Python实战之双向队列deque/queue学习笔记及简单练习

东方耀 手把手教React Native实战开发视频教程+源码笔记全集

[WTL/ATL]_[初级]_[微调控件CUpDownCtrl的使用]

[WTL/ATL]_[初级]_[TreeView控件如何显示ToolTip]