Android笔记(一): Android活动组件的创建和配置

一、Activity组件概述

Activity组件是Android的四大基本组件之一,它的主要功能就是定义界面。大多数应用包含多个屏幕,这意味着它们包含多个Activity。通常,应用中的一个 Activity 会被指定为主Activity,这是用户启动应用时出现的第一个屏幕。然后,每个 Activity 可以启动另一个Activity,以执行不同的操作。 Activity 充当了应用与用户互动的入口点。 Activity提供窗口供应用在其中绘制界面。 一个 Activity 实现应用中的一个屏幕。

二、创建和配置Activity

Activity主要的功能就是定制移动应用的界面。当前,Activity主要有两种方式来定义界面:(1)传统结合XML布局文件定义Activity的界面;(2)谷歌公司主推的Compose工具包定义活动的界面。

2.1 传统结合采用XML布局文件定义活动界面

新建一个Android项目,因为本开发工具采用“Android Studio Giraffe | 2022.3.1 Patch 1”,创建新的项目模块,默认的主活动MainActivity是ComponentActivity的子类,采用支持Compose的界面呈现方式。将原有的MainActivity.kt删除。
因此,创建一个传统结合XML布局文件的活动,可以右击鼠标,在弹出的三级菜单,依次选择New->Activity->Basic Views Activity,如图1所示。
在这里插入图片描述
这时会生成一个对应继承AppCompatActivity类的子活动类,例如MainActivity,代码如下:

class MainActivity : AppCompatActivity() {
    
         
	override fun onCreate(savedInstanceState: Bundle?) {
    
             
		super.onCreate(savedInstanceState)          
		setContentView(R.layout.activity_main)         
 }
}

自定义MainActivity对应的布局文件,如下所示:

<?xml version="1.0" encoding="utf-8" <androidx.constraintlayout.widget.ConstraintLayout     
     xmlns: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"     
     android:background="@color/design_default_color_secondary"     
     tools:context=".MainActivity">      
     <TextView         
          android:id="@+id/textView"         
          android:layout_width="wrap_content"         
          android:layout_height="wrap_content"         
          android:text="Hello World"         
          android:textSize="30sp"         
          app:layout_constraintBottom_toBottomOf="parent"           
          app:layout_constraintEnd_toEndOf="parent"         
          app:layout_constraintStart_toStartOf="parent"         
          app:layout_constraintTop_toTopOf="parent" />  
</androidx.constraintlayout.widget.ConstraintLayout> 

定义活动后需要在AndroidManifest.xml文件中配置活动。特别是值得注意地是样式的配置,这是因为
最新的Android Studio默认支持Android JetPack Compose组件,因此默认样式定义格式不匹配,修改配置文件如下

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android">      
<application         
……  <!-- 省略 -->      
android:theme="@style/Theme.AppCompat">          
<activity             
	android:name=".MainActivity"             
	android:exported="true"             
	android:label="@string/app_name"             
	android:theme="@style/Theme.AppCompat">             
	<intent-filter>                 
		<action android:name="android.intent.action.MAIN" />                 
		<category android:name="android.intent.category.LAUNCHER" />             
	</intent-filter>         
</activity>     
</application> 
</manifest>

注意:上述的主题均将默认的样式修改为:

android:theme = “@style/Theme.AppCompat”

表示与AppCompatActvity子类保持一致。
如果需要对绑定的XML文件进行处理,这时需要获取XML配置的GUI控件,具体的处理方式有两种:
默认的结合findViewById访问GUI控件和利用ViewBinding来访问GUI控件。
(1)默认的结合findViewById访问GUI控件

class MainActivity : AppCompatActivity() {
    
         
	override fun onCreate(savedInstanceState: Bundle?) {
    
             
	super.onCreate(savedInstanceState)          
      
	setContentView(R.layout.activity_main)         //必须先调用,否则检索控件失败
	val textView  = findViewById<TextView>(R.id.textView);        
 	textView.setText("Hello Android World")     }      
 }
 }

(2)利用viewBinding来访问GUI控件
这需要在项目模块的build.gradle中设置允许使用viewBinding,形如:

android {

buildFeatures{
viewBinding true
}
}

这时修改活动MainActivity,代码如下:

class MainActivity : AppCompatActivity() {
    
         
	override fun onCreate(savedInstanceState: Bundle?) {
    
             
		super.onCreate(savedInstanceState)                
		val binding = ActivityMainBinding.inflate(layoutInflater)         
		binding.textView.text = "Hello Android World"        
		setContentView(binding.root)     
 	} 
}

运行结果如图2所示:

在这里插入图片描述

2.2 采用JetPack Compose组件定义界面

(1)新建一个项目模块。
(2)修改模块的build.gradle,增加允许使用compose的许可,如下所示:

android{

buildFeatures{
compose true
}
}

定义主活动MainActivity,代码如下:

class MainActivity : ComponentActivity() {
    
         
override fun onCreate(savedInstanceState: Bundle?) {
    
             
	super.onCreate(savedInstanceState)         
	setContent {
    
                 
		Ch03DemoTheme {
    
                     
			Surface(                     
			modifier = Modifier.fillMaxSize(),                     
			color = Color(0x03,0xDA,0xC6)                 
			) {
    
                         
				Greeting("Android World")                
 					}            
 				}         
}     
} 
} 
@Composable fun Greeting(name: String, modifier: Modifier = Modifier) {
    
         
		Text(         
			text = "Hello $name!",         
			fontSize = 30.sp,         
			textAlign = TextAlign.Center,         
			modifier = modifier     
			)
 }

还需要将MainActivity配置在AndroidManifest.xml中。

<application android:theme="@style/Theme.Ch03Demo">         
<activity             
	android:name=".MainActivity"            
	android:exported="true"             
	android:label="@string/app_name"             
	android:theme="@style/Theme.Ch03Demo">             
	<intent-filter>                 
		<action android:name="android.intent.action.MAIN" />                  
		<category android:name="android.intent.category.LAUNCHER" />             
	</intent-filter>         
</activity>     
</application>  
</manifest>

运行结果如图3所示。
在这里插入图片描述
参考:

”Jetpack Compose 教程“ https://developer.android.google.cn/jetpack/compose/tutorial?hl=zh-cn

猜你喜欢

转载自blog.csdn.net/userhu2012/article/details/133280401