編輯:關於Android編程
在做這個計算器的時候,我認為主要分為兩部分:界面設計,功能實現。
(效果圖)
其實界面設計和功能實現是相互聯系在一起的,我界面怎麼去設計,功能就要去怎麼實現。
1、控件:界面有19個按鈕,數字1-9和小數點、加減乘除、清空回退、百分比、等號,還有一個顯示內容的文本框。實現起來十分簡單只要拖動到xml中即可。
2、布局設計:剛拖進來的控件都擺放得比較凌亂,需要對其調整,本案例中,我會使用LinearLayout對界面進行布局。
3、樣式:有背景顏色、邊框線顏色、圓角。
接下來先看樣式文件:
簡單說明一下:
gradient-- 對應顏色漸變。 startcolor、endcolor就不多說了。android:angle 是指從哪個角度開始變。solid -- 填充。stroke -- 描邊。corners -- 圓角。padding -- 定義內容離邊界的距離。 與android:padding_left、android:padding_right這些是一個道理。先介紹white_bg.xml,也就是顯示內容的文本框的樣式文件:
接下來介紹白色鍵的樣式文件white_selector.xml:
第一個item是調用上一個樣式white_bg.xm為默認情況下的樣式第二個item是調用了gray_bg.xml樣式文件,根據其android:state_pressed="true"屬性,意為點擊時的樣式。
接下來介紹白色鍵的樣式文件orange_selector.xml:
第一個item是調用了ashen.xml樣式文件,根據其android:state_pressed="true"屬性,意為點擊時的樣式。
第二個item是調用樣式orange_bg.xm為默認情況下的樣式:
在activity_main.xml的空間中分別去調用white_bg、white_selector、orange_selector
功能實現:
在實現功能前,先要分清楚他們之間的關系:
1、數字0-9和小數點
2、加減乘除
3、清除與回刪鍵
4、等號
5、百分比
public class MainActivity extends Activity implements View.OnClickListener { Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9; //數字0-9 Button btn_dian; //小數點 Button btn_C, btn_del; //清除和回刪 Button btn_yu; //求余 Button btn_chu; //除法 Button btn_cheng; //乘法 Button btn_jia; //加法 Button btn_jian; //減法 Button btn_deng; //等於 EditText input;//顯示內容文本框 boolean clear_ed; //是否情況文本框 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_C = (Button) findViewById(R.id.btn_C); btn_del = (Button) findViewById(R.id.btn_del); btn_yu = (Button) findViewById(R.id.btn_yu); btn_chu = (Button) findViewById(R.id.btn_chu); btn_cheng = (Button) findViewById(R.id.btn_cheng); btn_jia = (Button) findViewById(R.id.btn_jia); btn_jian = (Button) findViewById(R.id.btn_jian); btn_deng = (Button) findViewById(R.id.btn_deng); btn_dian = (Button) findViewById(R.id.btn_dian); btn_9 = (Button) findViewById(R.id.btn_9); btn_8 = (Button) findViewById(R.id.btn_8); btn_7 = (Button) findViewById(R.id.btn_7); btn_6 = (Button) findViewById(R.id.btn_6); btn_5 = (Button) findViewById(R.id.btn_5); btn_4 = (Button) findViewById(R.id.btn_4); btn_3 = (Button) findViewById(R.id.btn_3); btn_2 = (Button) findViewById(R.id.btn_2); btn_1 = (Button) findViewById(R.id.btn_1); btn_0 = (Button) findViewById(R.id.btn_0); input = (EditText) findViewById(R.id.input); btn_0.setOnClickListener(this); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setOnClickListener(this); btn_yu.setOnClickListener(this); btn_chu.setOnClickListener(this); btn_cheng.setOnClickListener(this); btn_jia.setOnClickListener(this); btn_jian.setOnClickListener(this); btn_deng.setOnClickListener(this); btn_dian.setOnClickListener(this); btn_C.setOnClickListener(this); btn_del.setOnClickListener(this); } @Override public void onClick(View v) { String str = input.getText().toString(); if (str.equals("0")) { str = ""; } switch (v.getId()) { case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_dian: if (clear_ed) { clear_ed = false; str = ""; input.setText("0"); //重置為0 } input.setText(str + ((Button) v).getText()); //根據按鈕的setText來添加數字 break; case R.id.btn_jia: case R.id.btn_jian: case R.id.btn_cheng: case R.id.btn_chu: input.setText(str + " " + ((Button) v).getText() + " "); //為區分加減乘除和數字 特意留了空格為間隔, break; case R.id.btn_C: input.setText("0"); //重置為0 break; case R.id.btn_del: if (input.length() <= 1 || input.getText().toString().equals("")) { input.setText("0"); } else { input.setText(str.substring(0, str.length() - 1)); // 刪除末尾一個數 由0開始 到str長度減1. } break; case R.id.btn_deng: getResult(); break; case R.id.btn_yu: Double d3 = Double.parseDouble(str); Double d4 = d3 * 0.01; input.setText(d4 + ""); break; } } private void getResult() { String exp = input.getText().toString(); if (exp == null || exp.equals("")) { //如果exp為空的話結束 return; } if (!exp.contains(" ")) {//如果exp沒有為預算法預留的“空格”的話結束 return; } clear_ed = true; double result = 0; String s1 = exp.substring(0, exp.indexOf(" ")); //定義s1的內容是 運算符前的那串數字 String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//運算符 String s2 = exp.substring(exp.indexOf(" ") + 3); //定義s2的內容是 運算符前的那串數字 System.out.println(s1); System.out.println(op); System.out.println(s2); if (!s1.equals("") && !s2.equals("")) { //分四種情況來寫,s1 s2都不為null。s1 為null,s2不為。s1不為,s2為空。s12都為空的 double d1 = Double.parseDouble(s1); //轉化為double型 double d2 = Double.parseDouble(s2); if (op.equals("+")) { //加法運算 result = d1 + d2; } else if (op.equals("-")) { //減法運算 result = d1 - d2; } else if (op.equals("×")) { //乘法運算 result = d1 * d2; } else if (op.equals("÷")) { //除法運算 if (d2 == 0) { //如果分母為0,那麼結果為0 result = 0; } else { result = d1 / d2; } } //將算好了的結果,再根據是否包含小數點來 決定輸出的結果類型:整型還是雙精度型 if (!s1.contains(".") && !s2.contains(".")) { //如果s1、s2都不包含小數點,那麼他們是整型 int r = (int) result; //轉化為int型 input.setText(r + ""); } else { input.setText(result + ""); } } else if (!s1.equals("") && s2.equals("")) { //如果s1不為空,s2為空 input.setText(exp); //結果不作處理,原樣輸出 } else if (s1.equals("") && s2.equals("")) { //都為空 input.setText(exp); //結果不作處理,原樣輸出 } else if (s1.equals("") && !s2.equals("")) { //如果s1為空,s2不為空 double d2 = Double.parseDouble(s2); if (op.equals("+")) { //加法運算 result = 0 + d2; } else if (op.equals("-")) { //減法運算 result = 0 - d2; } else if (op.equals("×")) { //乘法運算 result = 0; } else if (op.equals("÷")) { //除法運算 result = 0; } //將算好了的結果,再根據是否包含小數點來 決定輸出的結果類型:整型還是雙精度型 if (!s2.contains(".")) { //如果s1、s2都不包含小數點,那麼他們是整型 int r = (int) result; //轉化為int型 input.setText(r + ""); } else { input.setText(result + ""); } } } }
後期再添加些注釋,先偷會懶。
1. Testing http://developer.android.com/tools/testing/index.html Android的框架包含了一組完整的
閒得蛋疼,折騰折騰android源碼包下面widget包下面很少用以及幾乎沒聽說過的控件(針對自己而言,莫要批斗(⊙o⊙)哦丫)。TextClock效果圖實現原理Text
華為榮耀v8max和小米max有什麼區別?哪款手機比較好?相信很多網友對這兩款手機還不是很清楚,下文介紹小米max和華為榮耀v8max對比,一起來看看吧!
需求是這樣的:在應用程序的詳情介紹時,有評論的版塊,該頁評論最多顯示5條,而每條最大字數是140個字符,每條評論可能根據字數不同,所占據的高度也不一樣,如有的是1行,有的