通常一个界面就是一个Activity,但不一定所有界面都是,有些是对话框。
Activity也可以通过透明效果,做出对话框的效果。
逻辑层面:
一个java类:用来描述逻辑,例如:按钮点击;登录这样的逻辑。
一个布局:用来描述样式和位置,例如:按钮颜色,按钮大小,按钮位置。
Activity组成部分:
一个Activity对应一个java类文件和一个XML文件。
容器控件:内部还能放其他控件。
非容器控件:内部不能放其他控件,例如button。
不推荐px单位,字体用sp单位,除字体外都用dp单位。
dp:与设备无关像素,根据屏幕的缩放自动计算,1dp在缩放为1的设备上,就是1px,在缩放为2的设备上就是2px。
非容器类型控件
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="50sp"
android:textColor="#f00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
要在代码中操作空间,要先找到控件,因此需要先给空间取个名字,即id属性
<TextView
android:id="@+id/tv"
android:text="Hello World!"
android:textSize="50sp"
android:textColor="#f00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/tv"
,然后在代码中找到相应的控件,通过findViewById
的方法:
TextView tv = findViewById(R.id.tv);
tv.setText("Hello tv!");
外部容器的布局设置,LinearLayout
:线性布局,其默认的方向是水平(horizontal);
更改为垂直只需要设置orientation
属性位vertical
。
<LinearLayout 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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="50sp"
android:textColor="#f00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="50sp"
android:textColor="#f00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
LinearLayout>
边距:
可以给LinearLayout
设置一个padding
,或者TextView
设置margin
。
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我" />
Button bt = findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(MainActivity.this,"???",Toast.LENGTH_LONG).show();
}
});
Activity就是一个类,一个界面会有一个java类,还有一个布局文件,还有一些其他文件。所以可以按照java中的方法来分包。例如:我们可以将所有的Activity放到activity包中,这样方便管理。
创建包
创建Activity
选中包,右键New-Activity-选择一个模板,输入名称,finish。
点击button
实现界面的跳转。
在activity_main.xml
中添加一个Button
<Button
android:id="@+id/bt_openSecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳转到第二个界面"/>
然后在MainActivity.java
中添加
Button bt_openSecond = findViewById(R.id.bt_openSecond);
bt_openSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
Intent
是信息的载体,是一个将要执行的动作的抽象的描述,用它可以去请求组件做相应的操作,一般来说是作为参数来使用,由Intent
来协助完成 Android各个组件之间的通讯。
Intent
一般用于启动Activity、启动服务,发送广播等,承担了Android应用程序三大核心组件的相互通信功能。
1.开启一个新的Actiity–显式Intent
首先实例化一个intent对象,构造方法中接受两个参数,第一个参数Context需要填入一个启动活动的上下文,一般为当前的Activity,第二个参数Class是要启动的目标Activity的java类,这样就构造出一个表示我们"意图"的intent对象。
如上面这段代码,首先构造出一个intent,将当前的activity作为上下文,SecondActivity作为目标activity,然后用startActivity()方法开启新的activity,即当点击当前activity页面的按钮,就会跳转到第二个activity。
2.开启一个新的Activity–隐式Intent
没有明确指定组件名的Intent称为隐式意图。系统会根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的组件。
AndroidManifest.xml文件中,首先被调用的Activity要有一个带有
并且包含
的Activity,设定它能处理的Intent,并且category设为"android.intent.category.DEFAULT"。action的name是一个字符串,可以自定义,例如我在这里设成"abcdefg":
Action:用来指明要实施什么动作,一些常用的Action如下:
ACTION_CALL 启动一个电话
ACTION_EDIT 显示用户编辑的数据
ACTION_MAIN 作为Task中第一个Activity启动
ACTION_SYNC 同步手机与数据服务器上的数据
ACTION_BATTERY_LOW 电池电量过低警告
ACTION_HEADSET_PLUG 插拔耳机警告
ACTION_SCREEN_ON 屏幕变亮警告
ACTION_TIMEZONE_CHANGED 改变时区警告
Category:一个字符串,包含了关于处理该intent的组件的种类信息。一个intent对象可以有任意个category。intent类定义了许多category常数。
点击返回键可以关闭当前的Activity,这是系统默认实现的,当然也可以自己实现一个按钮,点击时关闭当前的Activity,比如左上角的"←"键。
在activity_second.xml
文件中创建一个button
控件
<Button
android:id="@+id/bt_Close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭"/>
然后在SecondActivity.java
中设置监听器,实现关闭
public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button bt_Close = findViewById(R.id.bt_Close);
bt_Close.setOnClickListener(this);
}
@Override
public void onClick(View view) {
finish();
}
这是让当前类实现监听器,前面使用的是匿名监听器。
src-main-AndroidManifest.xml
文件作用该文件可以翻译为“清单文件”,所以说它的功能就是将当前应用的界面等组件写到这里,好处是Android会用到,例如:手动安装apk文件时,都会显示一个界面,说这个应用需要哪些权限,而这些权限就是写到该文件的。
文件格式还是xml文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a01_example">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity android:name=".activity.SecondActivity">activity>
application>
manifest>
android.intent.action.MAIN
:表示该Activity是应用的启动入口,且不需要任何Intent携带的数据。
android.intent.category.LAUNCHER
:表示将该Activity的图标设为手机主屏幕上的应用图标,如果它没有图标,就用Application的图标。
若你换一个默认页面入口,只需将
和其里面的内容放入到你要设置的那个activity中去即可。
前面说过,一个activity对应一个java类和一个xml布局文件,因此在手动创建activity时,就是需要创建二者,并进行一些相关的配置。
①首先创建java文件,继承AppCompatActivity类(可以参考其他activity的java文件)
②在res下的layout文件中创建xml文件,选择根元素后创建。
这里注意一点,java文件和xml文件的命名最好按照系统的默认套路,比如FirstAcitvity.java对应activity_first.xml这样。
③创建完两个文件后,他们之间还没有什么关系,此时需要将二者关联起来,只需要在java文件的onCreate方法中,通过setContentView方法中设置,可以参考其他activity。
④在清单文件中配置此activity,参考其他activity。
将项目运行到模拟器
将项目运行到手机上
开启开发者模式:关于手机->连续点击3,4次Android版本 更多设置中会出现开发者选项,打开USB调试
USB连接电脑,运行项目是就会有真实设备选项。