Vai trò của AndroidManifest.xml:
Các khai báo quan trọng:
<application>: Thông tin ứng dụng (tên, icon, theme)<activity>: Khai báo các màn hình<uses-permission>: Quyền truy cập hệ thống<uses-sdk>: Phiên bản Android hỗ trợ<intent-filter>: Bộ lọc intentVí dụ XML:
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>Điểm giống nhau:
Điểm khác nhau:
| Thành phần | Chức năng | Tương tác | Ứng dụng |
|---|---|---|---|
| TextView | Hiển thị text | Chỉ đọc | Nhãn, thông báo |
| EditText | Nhập liệu | Có thể chỉnh sửa | Form nhập dữ liệu |
| Button | Thực hiện hành động | Nhấn để kích hoạt | Nút bấm, điều khiển |
Ví dụ trong màn hình đăng nhập:
<TextView
android:text="Đăng nhập"
android:textSize="24sp" />
<EditText
android:id="@+id/etUsername"
android:hint="Tên đăng nhập"
android:inputType="text" />
<EditText
android:id="@+id/etPassword"
android:hint="Mật khẩu"
android:inputType="textPassword" />
<Button
android:id="@+id/btnLogin"
android:text="Đăng nhập" />So sánh các Layout:
LinearLayout:
RelativeLayout:
ConstraintLayout:
Ưu - nhược điểm LinearLayout trong form đăng ký:
Ưu điểm:
Nhược điểm:
Khái niệm Adapter:
Phân biệt ArrayAdapter và BaseAdapter:
ArrayAdapter:
BaseAdapter:
Tái sử dụng View và ViewHolder pattern:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_layout, parent, false);
holder = new ViewHolder();
holder.textView = convertView.findViewById(R.id.textView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(data.get(position));
return convertView;
}
static class ViewHolder {
TextView textView;
}activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/listViewNames"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>MainActivity.java:
package com.example.studentlist;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private ListView listViewNames;
private String[] studentNames = {
"Nguyễn Văn An",
"Trần Thị Bình",
"Lê Minh Cường",
"Phạm Thị Dung",
"Hoàng Văn Em",
"Vũ Thị Phương",
"Đỗ Minh Giang",
"Bùi Thị Hoa",
"Lý Văn Inh",
"Chu Thị Khánh"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listViewNames = findViewById(R.id.listViewNames);
// Tạo ArrayAdapter
ArrayAdapter<String> adapter = new ArrayAdapter<>(
this,
android.R.layout.simple_list_item_1,
studentNames
);
// Gắn adapter vào ListView
listViewNames.setAdapter(adapter);
// Xử lý sự kiện nhấn vào item
listViewNames.setOnItemClickListener((parent, view, position, id) -> {
String selectedName = studentNames[position];
Toast.makeText(MainActivity.this,
"Xin chào, " + selectedName + "!",
Toast.LENGTH_SHORT).show();
});
}
}