/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.calculator2;
import android.app.Activity;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
public class Calculator extends Activity implements PanelSwitcher.Listener, Logic.Listener,
OnClickListener, OnMenuItemClickListener {
EventListener mListener = new EventListener();
private CalculatorDisplay mDisplay;
private Persist mPersist;
private History mHistory;
private Logic mLogic;
private ViewPager mPager;
private View mClearButton;
private View mBackspaceButton;
private View mOverflowMenuButton;
static final int BASIC_PANEL = 0;
static final int ADVANCED_PANEL = 1;
private static final String LOG_TAG = "Calculator";
private static final boolean DEBUG = false;
private static final boolean LOG_ENABLED = false;
private static final String STATE_CURRENT_VIEW = "state-current-view";
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
// Disable IME for this application
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
setContentView(R.layout.main);
mPager = (ViewPager) findViewById(R.id.panelswitch);
if (mPager != null) {
mPager.setAdapter(new PageAdapter(mPager));
} else {
// Single page UI
final TypedArray buttons = getResources().obtainTypedArray(R.array.buttons);
for (int i = 0; i < buttons.length(); i++) {
setOnClickListener(null, buttons.getResourceId(i, 0));
}
buttons.recycle();
}
if (mClearButton == null) {
mClearButton = findViewById(R.id.clear);
mClearButton.setOnClickListener(mListener);
mClearButton.setOnLongClickListener(mListener);
}
if (mBackspaceButton == null) {
mBackspaceButton = findViewById(R.id.del);
mBackspaceButton.setOnClickListener(mListener);
mBackspaceButton.setOnLongClickListener(mListener);
}
mPersist = new Persist(this);
mPersist.load();
mHistory = mPersist.history;
mDisplay = (CalculatorDisplay) findViewById(R.id.display);
mLogic = new Logic(this, mHistory, mDisplay);
mLogic.setListener(this);
mLogic.setDeleteMode(mPersist.getDeleteMode());
mLogic.setLineLength(mDisplay.getMaxDigits());
HistoryAdapter historyAdapter = new HistoryAdapter(this, mHistory, mLogic);
mHistory.setObserver(historyAdapter);
if (mPager != null) {
mPager.setCurrentItem(state == null ? 0 : state.getInt(STATE_CURRENT_VIEW, 0));
}
mListener.setHandler(mLogic, mPager);
mDisplay.setOnKeyListener(mListener);
if (!ViewConfiguration.get(this).hasPermanentMenuKey()) {
createFakeMenu();
}
mLogic.resumeWithHistory();
updateDeleteMode();
}
private void updateDeleteMode() {
if (mLogic.getDeleteMode() == Logic.DELETE_MODE_BACKSPACE) {
mClearButton.setVisibility(View.GONE);
mBackspaceButton.setVisibility(View.VISIBLE);
} else {
mClearButton.setVisibility(View.VISIBLE);
mBackspaceButton.setVisibility(View.GONE);
}
}
void setOnClickListener(View root, int id) {
final View target = root != null ? root.findViewById(id) : findViewById(id);
target.setOnClickListener(mListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.basic).setVisible(!getBasicVisibility());
menu.findItem(R.id.advanced).setVisible(!getAdvancedVisibility());
return true;
}
private void createFakeMenu() {
mOverflowMenuButton = findViewById(R.id.overflow_menu);
if (mOverflowMenuButton != null) {
mOverflowMenuButton.setVisibility(View.VISIBLE);
mOverflowMenuButton.setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.overflow_menu:
PopupMenu menu = constructPopupMenu();
if (menu != null) {
menu.show();
}
break;
}
}
private PopupMenu constructPopupMenu() {
final PopupMenu popupMenu = new PopupMenu(this, mOverflowMenuButton);
final Menu menu = popupMenu.getMenu();
popupMenu.inflate(R.menu.menu);
popupMenu.setOnMenuItemClickListener(this);
onPrepareOptionsMenu(menu);
return popupMenu;
}
@Override
public boolean onMenuItemClick(MenuItem item) {
return onOptionsItemSelected(item);
}
private boolean getBasicVisibility() {
return mPager != null && mPager.getCurrentItem() == BASIC_PANEL;
}
private boolean getAdvancedVisibility() {
return mPager != null && mPager.getCurrentItem() == ADVANCED_PANEL;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.clear_history:
mHistory.clear();
mLogic.onClear();
break;
case R.id.basic:
if (!getBasicVisibility()) {
mPager.setCurrentItem(BASIC_PANEL);
}
break;
case R.id.advanced:
if (!getAdvancedVisibility()) {
mPager.setCurrentItem(ADVANCED_PANEL);
}
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
if (mPager != null) {
state.putInt(STATE_CURRENT_VIEW, mPager.getCurrentItem());
}
}
@Override
public void onPause() {
super.onPause();
mLogic.updateHistory();
mPersist.setDeleteMode(mLogic.getDeleteMode());
mPersist.save();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
if (keyCode == KeyEvent.KEYCODE_BACK && getAdvancedVisibility()) {
mPager.setCurrentItem(BASIC_PANEL);
return true;
} else {
return super.onKeyDown(keyCode, keyEvent);
}
}
static void log(String message) {
if (LOG_ENABLED) {
Log.v(LOG_TAG, message
没有合适的资源?快使用搜索试试~ 我知道了~
Android应用源码之Calculator.zip项目安卓应用源码下载
共131个文件
xml:74个
png:34个
java:15个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 105 浏览量
2022-03-07
23:43:45
上传
评论
收藏 295KB ZIP 举报
温馨提示
Android应用源码之Calculator.zip项目安卓应用源码下载Android应用源码之Calculator.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
资源推荐
资源详情
资源评论
收起资源包目录
Android应用源码之Calculator.zip项目安卓应用源码下载 (131个子文件)
HEAD 41B
index 13KB
arity-2.1.2.jar 53KB
Calculator.java 10KB
Logic.java 9KB
CalculatorEditText.java 6KB
PanelSwitcher.java 6KB
CalculatorDisplay.java 5KB
CalculatorHitSomeButtons.java 4KB
ColorButton.java 4KB
EventListener.java 4KB
CalculatorEditable.java 4KB
History.java 3KB
Persist.java 2KB
HistoryAdapter.java 2KB
HistoryEntry.java 2KB
CalculatorLaunchPerformance.java 1KB
CalculatorInstrumentationTestRunner.java 1KB
CleanSpec.mk 2KB
Android.mk 1KB
Android.mk 355B
MODULE_LICENSE_APACHE2 0B
NOTICE 10KB
ic_launcher_calculator.png 20KB
ic_launcher_calculator.png 18KB
ic_launcher_calculator.png 15KB
clear_history.png 3KB
simple.png 3KB
advanced.png 3KB
clear_history.png 2KB
simple.png 2KB
advanced.png 2KB
calc_clear_symbol.png 2KB
calc_clear_symbol.png 2KB
calculator_input_field.9.png 1KB
calc_clear_symbol.png 1KB
calculator_input_field.9.png 1KB
calc_clear_symbol.png 951B
calc_clear_symbol.png 673B
ic_menu_overflow.png 554B
btn_keyboard_key_dark_pressed_holo.9.png 543B
ic_menu_overflow.png 526B
btn_keyboard_key_light_pressed_holo.9.png 515B
ic_menu_overflow.png 445B
btn_keyboard_key_light_normal_holo.9.png 436B
btn_keyboard_key_dark_normal_holo.9.png 429B
btn_keyboard_key_dark_pressed_holo.9.png 412B
btn_keyboard_key_light_pressed_holo.9.png 373B
btn_keyboard_key_light_normal_holo.9.png 329B
btn_keyboard_key_dark_pressed_holo.9.png 323B
btn_keyboard_key_light_pressed_holo.9.png 322B
btn_keyboard_key_dark_normal_holo.9.png 320B
calculator_input_field.9.png 297B
btn_keyboard_key_dark_normal_holo.9.png 271B
calculator_input_field.9.png 270B
btn_keyboard_key_light_normal_holo.9.png 258B
calculator_input_field.9.png 226B
main.xml 10KB
main.xml 9KB
strings.xml 5KB
simple_pad.xml 5KB
simple_pad.xml 4KB
styles.xml 4KB
advanced_pad.xml 4KB
main.xml 4KB
main.xml 3KB
advanced_pad.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
strings.xml 3KB
共 131 条
- 1
- 2
资源评论
yxkfw
- 粉丝: 76
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功