Code chức năng File Mainactyvity.java import import import import import import import import import import import import import import import import import import public androidx.anno
Trang 1
oe So SK OSS OO
BO GIAO DUC VA DAO TAO
Trường Đại Học Duy Tân
ĐỎ ÁN CÁ NHÂN
LẬP TRÌNH ỨNG DỤNG CHO CÁC THIẾT BỊ DI ĐỘNG
ĐÈ TÀI : Ứng Dụng Quản Lý Ghi Chú
|
Ậ
Lớp : CR 424 AM Giảng Viên : Phạm An Bình
Sinh viên thực hiện : Bùi Văn Bình
Mã Sinh Viên : 27211240478
——————=S®— *-=>« >*†ˆ®cC—— ©=———————
Trang 2Contents
1 Thiét ké giao di@in oe c.cccccccccccssessssssessessecsecsecsecsscssssscasesseesesseesscscassseansneateseseeseeeesees 4
1.1 Giao diện chính của ủng dụng - - + so nọ ng ng ng re 4 1.2 Giao diện Lịch sữ phép tínhh - <5 + sọ ng ng ng 4
1.3 c6 nh h6ố QÄ|A ÔỎ 5
2 Giao diện thực tế của app ¿6-52 S2+ St xe 2x22 2121111211.11.1111 xe 5
3 Toan n9 7a 7 3.1 Code chức năng - KH nh 7 Eile MainaCfyVi(y.]24VA - HH TH HH 7 3.2 Code Giao đien se 15 File menu _đ€1m10.XITIÌ - - <5 5 + + + 5E E1 1x ng re 15 File actfvity _ baim10.XIHỈ - 5 5 <0 TH HH 15 Eile lichsu.ximÌ - - 0221125192112 SH ng TT TT TT TH nghiệt 17 File pheptinh.xmiÌ L2 1112111112111 1111 1111511 1E 1115011111111 1 n1 1011111111 r re 17
Trang 31 Thiết kế giao diện
1.1 Giao diện chính của ung dung
Máy tính
phép tinh lịch sữ
|]
1.2 Giao diện Lịch sữ phép tính
lich str e
Trang 4
1.3 Giao dién bam giờ
bam gid’
0:00:000
2 Giao diện thực tế của app
PHÉP TÍNH HISTORY
MÁY TÍNH
Trang 5
Máy Tính
PHÉP TÍNH HISTORY PHEP TINH Bấm Giờ
9X6=54 9X6=54 —
543 - 3 = 540 543 - 3 = 540
540 + 6 = 546 540 + 6 = 546
0:00:757
0:01:124 0:01:492
0:01:842
0:02:177 0:02:527 0:02:876 0:03:265 0:03:775
Trang 6
3 Toàn bộ Code
3.1 Code chức năng
File Mainactyvity.java
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
public
androidx.annotation.NonNull;
androidx.appcompat.app.AlertDialog;
androidx.appcompat.app.AppCompatActivity; androidx.appcompat.widget.Toolbar;
android.content.DialogInterface;
android.content Intent;
android.os.Bundle;
android.util.Log;
android.view.Menu;
android.view.MenulInflater;
android.view.Menultem;
android.view.View;
android.widget.AdapterView;
android.widget.ArrayAdapter;
android.widget.Button;
android.widget.ListView;
android.widget.TabHost;
android.widget.TextView;
android.widget.Toast;
java.util.ArrayList;
class MainActivity extends AppCompatActivity { Integer sol =0;
Integer so2 =0;
Character dau = null;
Button btnthoat;
ListView lvHistory;
ArrayList<String>dskq;
ArrayAdapter<String>adapterkqne;
@Override
protected void onCreate (Bundle savedInstanceState)
}
super.onCreate (savedInstanceState);
addControls();
addEvents ();
Toolbar toolbar = findViewByld(R.id toolbar); setSupportActionBar (toolbar);
setTitle ("May tinh");
{
Trang 7btnthoat.setonClickListener (new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new
builder.setTitle("Bạn có muốn thoat khdi tng dung ?");
builder.setPositiveButton("Cé6", new
DialogInterface.OnClickListener() {
@Override public void onClick(Dialoginterface dialog, int which) { onBackPressed();
}
})z
builder.setNegativeButton("Khéng", new
DialogInterface.OnClickListener() {
@Override public void onClick(Dialoginterface dialog, int which) { }
})z
builder.show();
})z
}
private void addEvents() {
final TextView txtvkq = (TextView) findViewById(R.id.kq);
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText().toString()+"0");if(dau == null) {sel Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText().toString()+"1");if(dau == null) {sel Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText().toString()+"2");if(dau == null) {sel Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText ().toString()+"3");if(dau == null) {sel Integer parseInt (txtvkq.getText().toString());} else {so2 =
Integer.parselInt (txtvkq.getText().toString());} }!)z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText ().toString()+"4");if(dau == null) {sol = Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
Trang 8{ txtvkq.setText (txtvkq.getText ().toString()+"5");if(dau == null) {sol = Integer parseInt (txtvkq.getText().toString());} else {so2 =
Integer.parselInt (txtvkq.getText().toString());} }!)z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText ().toString()+"6");i1f(dau == null) {sol = Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText ().toString()+"7");if(dau == null) {sol = Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText ().toString()+"8");if(dau == null) {sol = Integer parseInt (txtvkq.getText().toString());} else {so2 =
Tnteger.parseTnt (txtvkq.getText().toString());} }})z
View.OnClickListener() {@Override public void onClick(View v)
{ txtvkq.setText (txtvkq.getText ().toString()+"9");if(dau == null) {sol = Integer parseInt (txtvkq.getText().toString());} else {so2 =
Integer.parselInt (txtvkq.getText().toString());} }!)z
Button Bo = (Button) findViewById(R.id.bo);
@Override
public void onClick(View v) {
so2 =0;
txtvkq.setText("");
})z
Button Cong =(Button) findViewByld(R.id.cong);
@Override
public void onClick(View v) {
dau = '+';
txtvkq.setText("");
})z
Button Tru =(Button) findViewByld(R.id.tru);
@Override
public void onClick(View v) {
dau = '-';
txtvkq.setText("");
})z
Button Nhan =(Button) findViewByld(R.id.nhan);
@Override
Trang 9dau = 'X!;
txtvkq.setText("");
})z
Button Chia =(Button) findViewByld(R.id.chia);
@Override
public void onClick(View v) {
dau = '/';
txtvkq.setText("");
})z
Button Bang =(Button) findViewByld(R.id.bang);
@Override
public void onClick(View v) {
if (dau!=null)
{
Integer kqne =0;
switch (dau) {
case '+';:{
kqne = sol + so2;
break;
} case '-'rf{
kqne = sol - so2;
break;
} case 'X':{
kqne = sol * so2;
break;
} case '/':f{
kqne = sol / so2;
break;
} } txtvkq.setText (kqne.toString());
dskq.add(Tnteger.toString(sol) + " " + đau + " "+
Tnteger.toString(so2) + " = " + String.valueOf(kqne));
sol = kqne;
dau = null;
adapterkqne.notifyDataSetChanged({);
})z
Trang 10@Override
public void onClick(View v) {
sol =0;
so2 =0;
dau =null;
txtvkq.setText("");
private void addControls() {
TabHost tabHost= (TabHost) findViewById(R.id.tabHost);
tabHost.setup();
TabHost.TabSpec tabl=tabHost.newTabSpec("t1");
tabl.setindicator("Phép Tinh");
tabl.setContent (R.id.tabl);
tabHost.addTab(tabl);
TabHost.TabSpec tab2=tabHost.newTabSpec("t2");
tab2.setIindicator ("History");
tab2.setContent (R.id.tab2);
tabHost.addTab(tab2);
lvHistory=(ListView) findViewByld(R.id.lvHistory);
dskq=new ArrayList<>();
MainActivity.this,
android.R.layout.simple list item 1,
dskq);
lvHistory.setAdapter(adapterkqne);
}
// Inflate menu tu tép tin XML
MenuTnflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_demo, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenulItem item) {
int id = item getItemId();
if (id == R.id.menu_calculator) {
Toast.makeText (this, "day là phần máy tinh ",
Toast.LENGTH SHORT) show();
return true;
} else if (id == R.id.menu_timer) {
⁄/ Bắt đầu hoạt động bamgio
Toast.makeText (this, "đã chuyển đến phần bắm giờ ",
10
Trang 11try {
Intent timerIntent = new Intent(this, bamgio.class);
startActivity(timerIntent);
return true;
} catch (Exception e) {
Log.e("MenuSelection", "Lỗi khi bắt đầu hoạt động Timer", e);
return false;
}
} else {
return super onOptionsitemSelected(item);
}
File bamgiojava
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.Menu;
import android.view.MenulInflater;
import android.view.Menultem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget Button;
import android.widget ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class bamgio extends AppCompatActivity {
Button btnStop, btnStart, btnPause, btnCount;
TextView txtTimer;
ListView lvCount;
long 1StartTime, lPauseTime, lSystemTime = 0L;
boolean isRun;
Handler handler = new Handler();
ArrayList<String> timeList = new ArrayList<>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity bamgio);
11
Trang 12btnStep = findViewById(R.id.btnStop);
btnPause = findViewByld(R.id.btnPause);
txtTimer = findViewByld(R.id.txtTimer);
btnCount = findViewByld(R.id.btnCount);
lvCount = findViewByld(R.id.ivCount);
clickStart
clickPause
clickCount
)z
(
)z
On
()3
// Khoi tao adapter cho ListView
adapter = new ArrayAdapter<> (this,
lvCount.setAdapter (adapter);
Toolbar toolbar = findViewByld(R.id.toolbar2);
setSupportActionBar (toolbar);
setTitle ("Bam giờ");
}
void clickStart() {
@Override
public void onClick(View v) {
if (isRun)
return;
isRun = true;
lStartTime = SystemClock.uptimeMillis() - lIPauseTime; // Cập nhật 1StartTime
handler.postDelayed(runnable, 0);
}
})z
}
void clickStop() {
@Override
public void onClick(View v) {
isRun = false;
1StartTime = 0;
l1PauseTime = 0;
lSystemTime = 0;
handler.removeCallbacks (runnable);
txtTimer.setText ("0:00:000");
// Lam moi ListView
timeList.clear();
adapter.notifyDataSetChanged();
void clickPause() {
@Override
12
Trang 13if (!isRun)
return;
isRun = false;
lPauseTime = SystemClock.uptimeMillis() - IStartTime; // C&ap nhật 1PauseTime
handler.removeCallbacks (runnable);
}
})z
}
voiqd click€eunt() {
@Override
public void onClick(View v) {
if (isRun) {
adapter.notifyDataSetChanged();
})z
}
@Override
public void run() {
if (isRun) {
ilSystemTime = SystemClock.uptimeMillis() - lStartTime;
long mins secs / 60;
secs = secs % 60;
long milliseconds = (long) (lUpdateTime % 1000);
txtTimer.setText("" + mins + ":" + String format("%$02d", secs)
}
}
Me
// Inflate menu tu tép tin XML
MenuTnflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_demo, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenulItem item) {
int id = item getItemId();
if (id == R.id.menu_timer) {
Toast.makeText (this, "đây là phần bấm gid",
return true;
} else if (id == R.id.menu calculator) {
⁄/ Bắt đầu hoạt động bamgio
13
Trang 14Toast.makeText (this, "đã chuyển đến phần máy tinh ",
try {
Intent timerIntent = new Intent(this, MainActivity.class); startActivity(timerIntent);
return true;
} catch (Exception e) {
Log.e("MenuSelection", "Lỗi khi bắt đầu hoạt động Timer", e);
return false;
}
} else {
return super onOptionsitemSelected(item);
}
3.2 Code Giao dien
4 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmins:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout width="match parent"
android:layout height="match parent"
tools:context=".MainActivity"
android: orientation="vertical">
<androidx.appcompat.widget.Toolbar
android: id="@+id/toolbar"
android: background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android: theme="?attr/actionBarTheme" />
<TabHost
android:id="@+id/tabHost">
<LinearLayout
android: orientation="vertical">
<TabWidget
android: id="@android:id/tabs"
<FrameLayout
android: id="@android:id/tabcontent"
android: layout _height="match_parent">
<LinearLayout
android:id="@tid/tabl"
14
Trang 15android: orientation="vertical">
<include layout="@layout/pheptinh"/>
</LinearLayout>
<LinearLayout android: id="§+id/tab2"
android: orientation="vertical">
<include layout="@layout/lichsu"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
File menu_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmilns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_calculator"
android: title="May Tinh" />
<item
android:id="@t+tid/menu_timer"
android:title="Bam Giờ" />
</menu>
File actvity_bamgio.xml
<?xml version="1.0" encoding="uti-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android: id="§@+id/bamgio"
<TextView
android: text="00:00:00"
android: textSize="60dp"
android: Llayout_marginTop="120dp"
android: Layout_centerHorizontal="true"
android: Layout_alignParentTop="true"
android: id="@+id/txtTimer"™ />
<LinearLayout
android: layout_alignParentStart="true"
15