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

敢说敢作敢为, 无怨无恨无悔。这篇文章主要讲述Android 开发笔记___初级控件之实战__计算器相关的知识,希望能为你提供帮助。

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

【Android 开发笔记___初级控件之实战__计算器】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 13import android.support.v7.app.AppCompatActivity; 14import android.text.method.ScrollingMovementMethod; 15import android.util.Log; 16import android.view.View; 17import android.widget.TextView; 18import 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 25private final static String TAG = "CalculatorActivity"; 26private TextView tv_result; 27 28@Override 29protected void onCreate(Bundle savedInstanceState) { 30super.onCreate(savedInstanceState); 31setContentView(R.layout.code_2_5); 32tv_result = (TextView) findViewById(R.id.tv_result); 33tv_result.setMovementMethod(new ScrollingMovementMethod()); 34 35findViewById(R.id.btn_cancel).setOnClickListener(this); 36findViewById(R.id.btn_divide).setOnClickListener(this); 37findViewById(R.id.btn_multiply).setOnClickListener(this); 38findViewById(R.id.btn_clear).setOnClickListener(this); 39findViewById(R.id.btn_seven).setOnClickListener(this); 40findViewById(R.id.btn_eight).setOnClickListener(this); 41findViewById(R.id.btn_nine).setOnClickListener(this); 42findViewById(R.id.btn_plus).setOnClickListener(this); 43findViewById(R.id.btn_four).setOnClickListener(this); 44findViewById(R.id.btn_five).setOnClickListener(this); 45findViewById(R.id.btn_six).setOnClickListener(this); 46findViewById(R.id.btn_minus).setOnClickListener(this); 47findViewById(R.id.btn_one).setOnClickListener(this); 48findViewById(R.id.btn_two).setOnClickListener(this); 49findViewById(R.id.btn_three).setOnClickListener(this); 50findViewById(R.id.btn_zero).setOnClickListener(this); 51findViewById(R.id.btn_dot).setOnClickListener(this); 52findViewById(R.id.btn_equal).setOnClickListener(this); 53findViewById(R.id.ib_sqrt).setOnClickListener(this); 54} 55 56@Override 57public void onClick(View v) { 58int resid = v.getId(); 59String inputText; 60if (resid == R.id.ib_sqrt) { 61inputText = "√"; 62} else { 63inputText = ((TextView) v).getText().toString(); 64} 65Log.d(TAG, "resid="+resid+",inputText="+inputText); 66if (resid == R.id.btn_clear) { 67clear(""); 68} else if (resid == R.id.btn_cancel) { 69if (operator.equals("") == true) { 70if (firstNum.length() == 1) { 71firstNum = "0"; 72} else if (firstNum.length() > 0) { 73firstNum = firstNum.substring(0, firstNum.length() - 1); 74} else { 75Toast.makeText(this, "没有可取消的数字了", Toast.LENGTH_SHORT).show(); 76return; 77} 78showText = firstNum; 79tv_result.setText(showText); 80} else { 81if (nextNum.length() == 1) { 82nextNum = ""; 83} else if (nextNum.length() > 0) { 84nextNum = nextNum.substring(0, nextNum.length() - 1); 85} else { 86Toast.makeText(this, "没有可取消的数字了", Toast.LENGTH_SHORT).show(); 87return; 88} 89showText = showText.substring(0, showText.length() - 1); 90tv_result.setText(showText); 91} 92

    推荐阅读