第3章
思维导图
1. 安卓开发中的布局详解
在Android应用开发中,布局是构建用户界面的基础,不同的布局适用于不同的场景,下面是对几种常用布局的解析:
-
线性布局(LinearLayout): 该布局以垂直或水平方向排列其子视图。适合于创建简单、有序的界面结构。例如,一个简单的登录页面可能使用水平线性布局放置用户名和密码输入框,再用垂直线性布局包裹整个表单。也是上课途中最常用的布局,一般都是垂直方式布局,水平就会很奇怪。
<LinearLayout android:orientation="vertical" ...> </LinearLayout>
-
约束布局(ConstraintLayout): 自Android Studio 2.2引入,它通过约束条件而非嵌套布局来定位视图,非常适合复杂界面设计,减少层级提高性能。例如,可以轻松实现一个视图相对于屏幕边缘或另一个视图的位置关系。
<androidx.constraintlayout.widget.ConstraintLayout ...> <Button app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" .../> </androidx.constraintlayout.widget.ConstraintLayout>
-
表格布局(TableLayout): 当需要以表格形式展示数据时使用,每个单元格可包含一个View或ViewGroup。适合展示结构化的信息,如设置界面的部分选项。
<TableLayout ...> <TableRow> <TextView .../> <TextView .../> </TableRow> </TableLayout>
-
帧布局(FrameLayout): 所有子视图堆叠在屏幕左上角,后添加的视图覆盖先添加的视图。适用于作为容器或实现叠加效果,如悬浮按钮。
<FrameLayout ...> <ImageView .../> <TextView .../> </FrameLayout>
-
相对布局(RelativeLayout): 通过相对位置(如“在父视图下方”、“与某视图右对齐”)来定位视图,适合灵活调整元素位置。
<RelativeLayout ...> <Button android:layout_below="@id/textView" .../> </RelativeLayout>
2. View和ViewGroup
View:对于一些简单常用的控件都可以是view控件,是基础的UI类控件,例如:TextView,ImageView。
ViewGroup:就是用于装纳View控件的容器,一般就会形成一个控件组,用于统一管理。
第4章
4.1:本章学习思维导图
4.2 TextView与EditText
TextView: 是Android中最常用的控件之一,用于在界面上显示静态文本信息。它可以展示简单的字符串或者通过HTML标签格式化文本,支持设置文字颜色、大小、样式等属性。TextView并不支持用户编辑文本,主要用于展示信息。
EditText :是TextView的扩展,允许用户输入和编辑文本。它常用于表单输入,如用户名、密码、邮箱地址等。EditText提供了更多的属性,比如文本提示、输入类型限制(如数字、密码、多行文本等),以便开发者控制和响应用户的输入行为。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
<EditText
android:id="@+id/edit_text_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名"
android:inputType="text"/>
4.3 Button
Button 控件用于触发特定的操作,比如提交表单、切换界面或执行某段代码。它通常与点击事件监听器关联,当用户点击按钮时,会执行相应的方法逻辑。
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"/>
4.4 RadioButton
RadioButton 是一种单选按钮,通常放在RadioGroup中以实现互斥选择。用户只能从一组RadioButton中选择一个选项。它常用于设置中的选项选择,比如性别选择、模式选择等。
<RadioGroup
android:id="@+id/radio_group_gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/radio_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"/>
<RadioButton
android:id="@+id/radio_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"/>
</RadioGroup>
4.5 CheckBox与ImageView
CheckBox 允许用户选择一个或多个选项。每个CheckBox都有一个独立的状态,用户可以勾选或取消勾选。常用于多项选择场景,如设置中的偏好选项。
ImageView 用于显示图片资源,可以加载drawable、资源文件或网络图片。它是展示图像内容的基础控件,支持缩放、旋转等操作。
<CheckBox
android:id="@+id/check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="同意条款"/>
<ImageView
android:id="@+id/iv_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
第5章
5.1本章思维导图
5.2 Activity概述
在Android应用中,Activity 是一个代表用户界面的组件,是应用程序的视觉呈现载体,也是与用户交互的主要方式。每个Activity都提供了一个屏幕,上面可以放置各种UI元素(如TextView、Button等),用于展示信息和接收用户输入。应用程序通常由一个或多个Activity组成,它们之间通过启动新的Activity或返回到前一个Activity来实现导航。
Activity的生命周期由系统管理,包括创建、启动、恢复、暂停、停止和销毁等多个状态。开发者需要在相应的生命周期回调方法中处理资源的初始化、释放及界面的更新逻辑,以确保应用的稳定运行和良好的用户体验。
5.3 Intent与IntentFilter
Intent 是Android中的一种消息传递机制,用于在组件之间(如Activity、Service)进行通信。它不仅可以启动其他Activity,还可以携带数据。Intent分为两种类型:
- 显式Intent:明确指定了要启动的目标组件的类名。
- 隐式Intent:仅描述了想要执行的操作和所需的数据,系统会根据Intent Filter匹配最合适的组件来处理这个Intent。
IntentFilter 是与Activity、BroadcastReceiver等组件关联的配置信息,用于声明该组件能处理哪些类型的Intent。它包含动作(Action)、类别(Category)和数据(Data)等元素,系统根据这些信息决定哪个组件应该响应特定的Intent。
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("key", "value"); // 传递数据
startActivity(intent); // 启动新Activity
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="www.example.com" />
</intent-filter>
</activity>
5.4 数据传递
在Activity之间传递数据主要通过Intent的putExtra()
方法实现,可以传递基本类型数据、Parcelable对象、Serializable对象等。接收方通过Intent的getStringExtra()
, getParcelableExtra()
, getSerializableExtra()
等方法获取数据。
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("message", "Hello from FirstActivity");
startActivity(intent);
String message = getIntent().getStringExtra("message");
5.5 Fragment
Fragment 是一种可重用的UI组件,它能够作为Activity界面的一部分,具有自己的生命周期和接收自己的输入事件。Fragment的设计目的是为了支持更灵活的屏幕布局,特别是在平板电脑和大屏幕手机上,可以轻松地调整UI布局以适应不同的屏幕尺寸和方向。Fragment可以独立存在,也可以嵌套在其他Fragment内,并且可以通过事务(Transaction)动态添加、移除或替换。
Fragment与Activity相似,也有自己的生命周期方法,但其生命周期与所在Activity紧密相关。通过FragmentManager和FragmentTransaction管理Fragment的添加、删除和替换等操作。
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_my, container, false);
}
}
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment myFragment = new MyFragment();
fragmentTransaction.add(R.id.fragment_container, myFragment).commit();
第6章
6.1本章思维导图
6.2 自动完成文本框 (AutoCompleteTextView)
自动完成文本框 是一个扩展的EditText控件,能够提供输入建议,帮助用户快速完成输入。当用户开始输入时,它会根据已输入的文本查询一个数据源(通常是字符串数组或Adapter),一般是有一个给出的数列组进行补全,并显示一个下拉列表供用户选择。这在实现搜索建议、邮箱地址补全等功能时非常有用。
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionHint="Start typing to see suggestions" />
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, COUNTRIES_ARRAY);
autoCompleteTextView.setAdapter(adapter);
6.3 下拉列表 (Spinner)
下拉列表 提供了一个从预设选项中选择单个项目的界面元素。它默认只显示当前选中的项,用户点击后会展开一个列表供选择。常用于设置项、分类选择等场景。
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Spinner spinner = findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.choices_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selection = (String) parent.getItemAtPosition(position);
// 处理选择
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// 不做处理或默认处理
}
});
6.4 滚动视图 (ScrollView)
滚动视图 允许用户在一个可滚动的容器中查看比屏幕大的内容。它只能包含一个直接子视图,并且适用于那些内容长度不定或可能超过屏幕高度的布局。
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
6.5 列表视图 (ListView)
列表视图 用于展示垂直滚动的列表项集合。每个列表项都可以包含复杂布局,并且列表项的数目可以动态变化。通常配合Adapter使用,以高效地管理列表项的数据和视图。
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
6.6 网格视图 (GridView)
网格视图 类似于ListView,但它以网格形式展示项目,每行可以有多个项目。适合展示图片库、图标列表等。
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit" />
6.7 进度条与滑块 (ProgressBar & SeekBar)
- 进度条(ProgressBar) 用于显示操作的进度或加载状态,有环形和水平两种形式。
- 滑块(SeekBar) 允许用户通过拖动来选择一个范围内的值。
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="200dp"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
6.8 选项卡 (TabLayout)
选项卡 提供了一种切换不同视图的方式,常与ViewPager一起使用,允许用户通过点击顶部的标签来切换不同的内容页面。
<TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill" />
6.9 画廊控件 (Gallery)
画廊控件 :在较旧的Android版本中用于展示可滚动的图片或项目列表,用户可以水平滑动浏览。但在Android 4.0以后,官方好像是推荐使用HorizontalScrollView或ViewPager替代。
第7章
7.1 Android 选项菜单 (OptionsMenu)
选项菜单 是Android应用中一个重要的交互元素,通常位于屏幕的顶部或底部(取决于设备和Android版本),用于提供对应用功能的访问。它包括一些常用的操作项,如“设置”、“搜索”等。
创建选项菜单
- 在你的Activity中重写
onCreateOptionsMenu()
方法来 inflate 菜单资源文件。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
- 在
res/menu
目录下创建一个XML菜单资源文件,例如main_menu.xml
。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:title="Search"/>
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_settings"
android:title="Settings"/>
</menu>
- 实现
onOptionsItemSelected(MenuItem item)
方法来处理菜单项的选择事件。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
// 处理搜索操作
return true;
case R.id.action_settings:
// 打开设置页面
startActivity(new Intent(this, SettingsActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
7.2 Android 上下文菜单 (ContextMenu)
上下文菜单 是一种特殊的菜单,它只在特定视图被长按时出现,提供与该视图相关的操作选项。
添加上下文菜单
- 使你的视图可长按,并注册上下文菜单。
TextView textView = findViewById(R.id.my_text_view);
registerForContextMenu(textView);
- 重写
onCreateContextMenu()
方法来填充菜单。
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "Copy");
menu.add(0, v.getId(), 0, "Delete");
}
- 实现
onContextItemSelected(MenuItem item)
来处理菜单项的选择。
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle() == "Copy") {
// 复制操作
} else if (item.getTitle() == "Delete") {
// 删除操作
}
return true;
}
7.3 Android 对话框 (Dialogs)
对话框 用于向用户显示信息、警告或者请求确认,同时阻止用户与应用的其他部分进行交互直到对话框被处理。
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to delete this item?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// 用户点击了确定按钮,执行删除操作
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// 用户点击了取消按钮,不做任何操作
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
这些控件和组件是构建Android应用用户界面的关键部分,能够提升用户体验并提供丰富的交互方式。