【安卓开发学习笔记(一)】

一、开发环境搭建

在进行Android应用程序的开发过程中,需要做好以下几个方面的工作:

  1. 安装Java JDK:需要安装Java JDK并配置环境变量。
  2. 下载Android Studio:Android Studio是官方的Android开发IDE,可以从官网下载最新版本。
  3. 安装Android模拟器或连接Android设备:在进行应用程序开发时,需要使用Android模拟器或者连接真实的Android设备进行调试。

二、简单控件

在安卓开发中,控件(View)是指构成应用程序UI界面的基本元素,如TextView、EditText、Button等。Android系统提供了大量的预定义控件,可以用于构建各种应用程序的UI界面。

控件是应用程序与用户进行交互的主要手段,通过控件,用户可以输入数据、进行操作、查看信息等。每个控件都有自己的属性和行为,可以通过设置这些属性和行为来控制控件的外观和行为。

在Android中,控件可以通过XML布局文件或Java代码创建和设置属性。例如,在XML布局文件中定义一个TextView控件:

<TextView
    android:id="@+id/textview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!" />

在上述代码中,我们定义了一个id为textview的TextView控件,并设置了其宽度为match_parent、高度为wrap_content、文本为“Hello World!”等属性。

在 Java 代码中获取 TextView ,可以使用 findViewById 方法:

TextView textView = findViewById(R.id.textview);

总之,在安卓开发中,控件(View)是指构成应用程序UI界面的基本元素,它们用于展示信息、接收用户输入、执行操作等。开发者可以通过设置控件的属性和行为来控制它们的外观和行为。

安卓基本控件及其属性

在安卓开发中,有很多常用的基本控件,这些控件可以用于构建应用程序的用户界面。下面是一些常用的基本控件及其属性:

  1. TextView:用于显示文本信息,常用属性有:
  • text:设置文本内容;
  • textSize:设置文本大小;
  • textColor:设置文本颜色;
  • textStyle:设置文本样式(粗体、斜体等);
  • gravity:设置文本对齐方式;
  • fontFamily:设置文本字体家族等。
  1. EditText:用于允许用户输入文本信息,常用属性有:
  • hint:设置提示文本;
  • textSize:设置文本大小;
  • textColor:设置文本颜色;
  • maxLength:设置最大长度;
  • inputType:设置输入类型;
  • password:设置是否为密码框等。
  1. Button:用于触发事件,常用属性有:
  • text:设置按钮文本;
  • textSize:设置文本大小;
  • textColor:设置文本颜色;
  • backgroundColor:设置背景颜色;
  • onClick:设置点击事件等。
  1. ImageView:用于显示图像,常用属性有:
  • src:设置图像资源;
  • scaleType:设置图片缩放类型;
  • adjustViewBounds:设置图片大小是否自适应等。
  1. RadioButton:用于单选,常用属性有:
  • text:设置单选框文本;
  • checked:设置单选框是否被选中;
  • onCheckedChanged:设置选中状态改变事件等。
  1. CheckBox:用于多选,常用属性有:
  • text:设置多选框文本;
  • checked:设置多选框是否被选中;
  • onCheckedChanged:设置选中状态改变事件等。
  1. Spinner:用于选择器,常用属性有:
  • entries:设置可选项列表;
  • prompt:设置提示文本;
  • onItemSelected:设置选项选择事件等。

这些控件都提供了许多属性来帮助我们控制其外观和行为。例如,可以使用 android:textColor 属性为文本着色,使用 android:background 属性设置控件的背景颜色等。

扫描二维码关注公众号,回复: 15331034 查看本文章

1. 文本显示

TextView是Android应用程序中最常用的一个控件,用于显示文本内容。可以设置文本的颜色、背景、字体等属性,代码如下:

Copy Code<TextView
    android:id="@+id/text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:textColor="#000000"
    android:textSize="20sp" />

核心知识点: TextView控件的基本属性和用法。

2. 按钮

Button是Android应用程序中常用的控件,用户点击按钮可以触发相应的事件。可以设置按钮的文字、背景、事件监听器等属性,代码如下:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me!"
    android:onClick="onClickButton" />

核心知识点: Button控件的基本属性和用法。

3. 常用布局

(1) 线性布局LinearLayout

线性布局可以让组件按照水平或竖直方向排列。可以设置方向、对齐方式、权重等属性,代码如下:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:weightSum="2">
    
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Left" />
        
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Right" />
        
</LinearLayout>

核心知识点: LinearLayout布局的基本属性和用法,包括方向、对齐方式、权重等。

layout_gravity和gravity有什么区别

layout_gravitygravity 都是用于控制控件在父容器中的对齐方式的属性。它们之间的区别在于作用对象不同。

  • layout_gravity:作用于子控件,用于决定该子控件在父容器中的对齐方式。
  • gravity:作用于父容器,用于决定其内部所有子控件的对齐方式。

layout_gravity 只能用于 LinearLayout 和 FrameLayout 中的子控件,而 gravity 只能用于 LinearLayout 和 RelativeLayout 等布局容器。

具体来说,layout_gravity 可以将子控件的位置进行微调或对齐处理,可以设置在水平居中、垂直居中、左对齐、右对齐等各种方向,同时也可以使用 fill 的参数来指定子控件占据整个父容器的宽度或高度。而 gravity 属性是用于控制容器内部所有子控件的对齐方式,包括水平居中、垂直居中、左对齐、右对齐等各种方向。

总之,使用 layout_gravity 可以调整子控件在父容器中的位置,尤其适合于 LinearLayout 和 FrameLayout 这种只有一个子控件的容器;而使用 gravity 可以控制容器内所有子控件的位置和对齐方式,适用于任何布局容器。

(2) 相对布局RelativeLayout

相对布局可以让组件之间按照相对位置排列。可以设置组件之间相对位置、对齐方式等属性,代码如下:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    
    <TextView
        android:id="@+id/text_view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
        
    <TextView
        android:id="@+id/text_view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/text_view1"
        android:text="Below Text View1" />
        
</RelativeLayout>

核心知识点: RelativeLayout布局的基本属性和用法,包括相对位置、对齐方式等。

(3) 网格布局GridLayout

网格布局可以让组件按照网格的形式排列,可以指定行数和列数。可以设置每个单元格的填充方式、对齐方式等属性,代码如下:

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2"
    android:rowCount="2">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="4" />

</GridLayout>

核心知识点: GridLayout布局的基本属性和用法,包括行数、列数、单元格填充方式等。

4. 图像显示

(1) 图像的缩放问题:

在Android开发过程中,经常会涉及到图像的显示问题。为了让图像在不同的设备上显示效果一致,需要进行缩放处理。可以通过设置ImageView的ScaleType属性、开启硬件加速、设置BitmapFactory.Options等方式来进行图像缩放,代码如下:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/image"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true" />

核心知识点: 图片缩放的实现方式,包括设置ImageView的ScaleType属性、使用硬件加速、设置BitmapFactory.Options等。

(2) 图像按钮ImageButton

图像按钮是一种带有图像的按钮控件,可以用于处理用户点击事件。可以设置按钮的图像资源和事件监听器等属性,代码如下:

<ImageButton
    android:id="@+id/image_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/icon"
    android:onClick="onClickImageButton" />

核心知识点: ImageButton的基本属性和用法。

三、Activity

1. Activity的启动和结束

在Android应用程序中,Activity是应用程序的基本组成单元,每个Activity都是一个独立的窗口。可以通过Intent来启动和结束Activity,代码如下:

// 启动Activity
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
startActivity(intent);

// 结束Activity
finish();

2. Activity的生命周期

在Android应用程序中,每个Activity都有自己的生命周期,包括onCreate、onStart、onResume、onPause、onStop、onDestroy等阶段。在这些阶段中,可以进行不同的操作来响应用户的行为,代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    
    
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
protected void onStart() {
    
    
super.onStart();
// 进行一些初始化操作
}

@Override
protected void onResume() {
    
    
super.onResume();
// 继续执行之前的操作
}

@Override
protected void onPause() {
    
    
super.onPause();
// 暂停执行操作
}

@Override
protected void onStop() {
    
    
super.onStop();
// 停止执行操作
}

@Override
protected void onDestroy() {
    
    
super.onDestroy();
// 销毁Activity
}

3. Activity的启动模式

Activity启动模式是什么

Activity启动模式是指在Android系统中通过Intent启动一个Activity时,系统如何处理该Activity实例的创建和启动。Android提供了四种不同的Activity启动模式:standard、singleTop、singleTask和singleInstance。

  1. standard模式(默认模式):每次启动Activity都会创建该Activity的一个新实例,并且放入任务栈(Task stack)的顶部。
  2. singleTop模式:如果新启动的Activity已经位于任务栈的顶部,则不会创建新的实例,而是调用该Activity的onNewIntent()方法。如果新启动的Activity不在任务栈的顶部,则会创建新的实例并放到任务栈栈顶。
  3. singleTask模式:系统在启动该Activity之前会先检查是否存在该Activity的实例,如果存在则直接调用该实例的onNewIntent()方法并把该实例移动到任务栈的顶部。如果不存在,则创建新的实例并放到任务栈栈顶。
  4. singleInstance模式:该模式下的Activity只能单独位于一个任务栈中,且在该任务栈中不存在其他Activity。当系统要启动该Activity时,会新建一个任务栈并将该Activity实例放入该任务栈中。即使从其他应用程序中启动该Activity,也会将其放入单独的任务栈中。

(1) 静态设置:

在AndroidManifest.xml文件中设置,可以指定Activity的启动模式为standard、singleTop、singleTask或singleInstance,代码如下:

<activity
    android:name=".MainActivity"
    android:launchMode="standard" />

(2) 动态设置:

在调用startActivity方法时可以指定启动模式,可以用Intent.FLAG_ACTIVITY_NEW_TASK、Intent.FLAG_ACTIVITY_CLEAR_TOP等标志位来指定启动模式,代码如下:

// singleTask
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

// singleInstance
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_INSTANCE);

4. Activity之间传递信息

Intent有什么作用

Intent是Android开发中非常重要的一个类,用于在不同组件(Activity、Service、BroadcastReceiver)之间传递消息和执行操作。Intent主要有以下几种作用:

  1. 启动Activity:可以通过Intent启动一个Activity,即让用户跳转到另一个页面或应用。
  2. 启动Service:可以通过Intent启动一个Service,即在后台执行一些耗时任务或在后台持续运行的服务。
  3. 发送广播:可以通过Intent发送一个广播以通知其他组件,或者接收其他组件发送的广播并做出相应处理。
  4. 携带数据:可以通过Intent携带数据,在不同组件之间传递数据,比如Activity之间传递参数。
  5. 执行操作:可以通过Intent执行一些系统操作,比如打开浏览器、发送短信等。

Intent组成部分

Intent由两个主要组成部分构成:动作(Action)和数据(Data)。

  1. 动作(Action):描述要执行的操作,可以是应用程序内部定义的常量或者是系统定义的常量。比如ACTION_VIEW表示查看一个数据,ACTION_SEND表示发送一条消息。
  2. 数据(Data):指定传递的数据,可以是一个URI、一个文本或者其他类型的数据。URI可以是一个文件路径、网址等,可以通过setData()方法设置。

除了这两个主要的组成部分,Intent还包括多个可选的属性(Extras),比如传递给目标组件的附加信息、标志位等。可以使用putExtra()方法将额外数据添加到Intent中。此外,Intent的组件(Component)也是一个可选属性,用于指定要启动的Activity或Service组件的完全限定名。

(1) 显式Intent和隐式Intent

  1. 显式Intent:显式Intent是指明了要启动的Activity名字的Intent。可以通过setClass等方法来设置,代码如下:
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
startActivity(intent);
  1. 隐式Intent:隐式Intent是没有指定要启动的Activity名字,而是指定了相应的Action或Category。例如,可以通过Intent.ACTION_VIEW来启动系统的浏览器,代码如下:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
startActivity(intent);

(2) 向下一个Activity发送消息:

可以通过putExtra等方法来向下一个Activity传递数据,代码如下:

Intent intent = new Intent(MainActivity.this, TargetActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

(3) 向上一个Activity返回消息:

可以通过setResult等方法来向上一个Activity返回结果,代码如下:

Intent intent = new Intent();
intent.putExtra("key", "value");
setResult(Activity.RESULT_OK, intent);
finish();

5. Activity获取一些附加信息

(1) 获取资源信息:

可以通过Context.getResources()等方法获取资源信息,代码如下:

String appName = getResources().getString(R.string.app_name);
int iconId = getResources().getIdentifier("app_icon", "drawable", getPackageName());

(2) 获取元数据信息:

可以通过PackageManager.getApplicationInfo()等方法获取元数据信息,代码如下:

ApplicationInfo appInfo = getApplicationInfo();
Bundle metaData = appInfo.metaData;
String versionName = metaData.getString("versionName");

补充

Bundle对象

在Android中,Bundle是一种用于存储和传递数据的对象。它可以将多个不同类型的数据打包成一个整体,然后在不同组件之间进行传递。

通常情况下,我们使用Bundle对象来传递数据给Activity或者Service等组件。比如在Activity之间传递数据,可以在启动目标Activity之前,将数据打包成Bundle对象,然后通过Intent的putExtras()方法添加到Intent中,最后再启动目标Activity。例如:

Intent intent = new Intent(this, TargetActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "binjie09");
bundle.putInt("age", 25);
intent.putExtras(bundle);
startActivity(intent);

在上面的代码示例中,我们首先创建了一个Intent对象,并指定了目标Activity为TargetActivity。然后,创建了一个Bundle对象,并将两个数据项"name"和"age"分别作为key-value对存储到Bundle对象中。最后,将Bundle对象添加到Intent中,并通过startActivity()方法启动目标Activity。

在目标Activity中,我们可以通过getIntent()方法获取传递过来的Intent对象,在从Intent对象中获取Bundle数据并解析。例如:

Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");

在上面的代码示例中,我们通过getIntent()方法获取传递过来的Intent对象,然后从Intent对象中获取Bundle数据,并通过getString()和getInt()方法获取数据项"name"和"age"的值。

总之,Bundle对象是一种非常便捷的数据传递方式,在多个组件之间传递数据时非常常用。

Override有什么用?

在Java中,Override是一个关键字,用于标识某个方法是对父类中同名方法的重写(覆盖)。

重写(覆盖)是指子类定义了一个与父类中同名、同参数列表、同返回类型的方法,并且该方法的访问权限不低于父类中同名方法的访问权限。当子类实例调用该方法时,将优先调用子类中的方法,而不是调用父类中的同名方法。

Override关键字的使用具有以下两个好处:

  1. 帮助避免犯错:如果我们需要重写父类的某个方法,但是因为拼写或者参数列表等原因,导致子类中的方法名称、参数类型或数量与父类中的不一致,那么该方法就不会被正确地重写,这时编译器会提示错误信息,帮助我们避免此类犯错。
  2. 提高可读性:如果我们在子类中没有使用Override关键字来重写父类中的方法,那么在代码阅读过程中,很难判断子类中的方法是继承而来的还是新添加的。因此,使用Override关键字可以清楚地表明该方法是对父类中同名方法的重写,提高了代码可读性。

安卓开发R是什么意思

在安卓开发中,R是一个自动生成的Java类,用于表示资源(如布局、字符串、图像等)的唯一ID。在应用程序中,我们可以通过这个ID来访问并使用应用程序中的各种资源。

当我们在开发安卓应用程序时,经常需要使用到各种资源,如布局文件、图片、字符串等。为了方便使用这些资源,在编译过程中,编译器会自动将这些资源转换为相应的资源ID,并生成一个名为R.java的Java类。

在R.java类中,每个资源都有一个唯一的ID,可以通过类似R.layout.main、R.string.hello_world、R.drawable.icon等方式来访问。例如,在Java代码中设置一个TextView的布局时,可以通过以下方式获取布局文件的ID:

setContentView(R.layout.activity_main);

在上述代码中,R.layout.activity_main表示布局文件activity_main.xml对应的唯一ID,我们可以通过这个ID来加载并使用该布局文件。

猜你喜欢

转载自blog.csdn.net/muzillll/article/details/131118875