1.新建空白项目
设置保存路径。
2.新建Activity
找到项目文件夹app\src\main\java\com.example.myapplication,右键新建New->Activity->Empty Activity:
设置新Activity的name、layout和package等内容。
新建完成后Activity Name以code文件生成在com.example.myapplication文件夹下:
新建的layout自动生成在./res/layout文件下,以.xml文件显示:
新建完成的MainActivity.java代码中自动重写了onCreate方法,并调用了setContentView设置新建Activity的layout布局:
3.设计Textview元素及其属性
在Android Studio的XML布局文件中,常用的布局编辑器有以下几种:
(1)ConstraintLayout:
这是一个强大的布局管理器,允许您在不同视图之间创建复杂的约束关系。它可以帮助您创建灵活且高效的布局,适应各种屏幕尺寸和方向。通过拖放和添加约束,您可以轻松地在设计视图中创建复杂的布局。
(2)LinearLayout:
这是一种简单的布局管理器,可以按垂直或水平方向排列子视图。子视图可以按顺序排列,您可以使用 android:orientation 属性指定是水平还是垂直方向。
(3)RelativeLayout:
在 ConstraintLayout 之前,RelativeLayout 是用于创建复杂布局的常用布局管理器。您可以通过相对其他视图的位置来定位视图,例如相对于父视图的顶部、底部、左边或右边。
(4)FrameLayout:
FrameLayout 是一个简单的布局管理器,通常用于堆叠视图。子视图可以重叠在一起,最上面的视图将在顶部显示。
(5)TableLayout:
TableLayout 是一种布局管理器,可以将视图按行和列的方式排列,类似于HTML的表格。TableRow 用于定义行,每行可以包含多个视图。
(6)GridLayout:
GridLayout 是一种布局管理器,可以将视图按网格的方式排列。您可以定义行和列,视图可以跨越多个单元格。
(7)CoordinatorLayout:
CoordinatorLayout 是一个增强型的 FrameLayout,用于处理子视图之间的复杂协调。它通常与 AppBarLayout、BottomSheetBehavior 和 FloatingActionButton 等元素一起使用,以创建复杂的滚动和动画效果。
默认使用ConstraintLayout编辑器,在新建Activity中,设置的Textview元素信息如下:
<?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"
tools:context=".MainActivity">
<!-- TextView元素及其属性de注释
android:id="@+id/textView" 这一行代码是在XML布局文件中为一个TextView元素指定一个唯一的ID:
@:表示这是一个资源引用;
+id:表示这是一个新的ID,如果这个ID不存在,会创建一个新的ID;如果已经存在,直接使用已有的ID;
textView:根据需要自定义ID的名称。
android:layout_width="wrap_content"
android:layout_height="wrap_content" 这两行代码是定义元素的宽、高属性,"wrap_content"表示元素的宽高随着内容动态变化
android:text="@string/textview" 这一行代码定义Textview元素的文本内容:
@string/textview表示应用程序的资源目录中的一个字符串资源;
@string部分表示这是一个字符串资源;
textview是该字符串资源的名称;
字符串资源通常定义在res/values/strings.xml文件中。
通过使用字符串资源,能方便实现多语言支持和文本的集中管理。
tools:ignore="MissingConstraints" 告诉布局编辑器(ConstraintLayout)忽略与约束布局相关的一个特定警告:
tools:ignore 用于工具(如布局编辑器)的命名空间,定义忽略操作;
(不影响应用程序的实际运行,只会影响设计和编辑时的行为。)
"MissingConstraints" 警告类型,指使用ConstraintLayout时,视图没有定义必要的约束条件。
tools:layout_editor_absoluteX="127dp"
tools:layout_editor_absoluteY="356dp" 这两行代码是指在布局编辑器中预览视图元素的位置:
设计时工具属性,用于在Android Studio布局编辑器中预览视图的位置,
不影响应用程序在设备上的实际布局,对运行结果无效。
-->
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/textview"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="127dp"
tools:layout_editor_absoluteY="356dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
如果要实现结果显示任意位置的Textview:
<!--
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" 这四行代码是指元素的上下左右位置根据布局变动;
app对比tools字段,会对运行结果造成影响
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintVertical_bias="0.537" 这两行代码定义了视图元素在水平方向上、垂直方向上的位置偏移;
根据布局编辑器上的元素位置变动;
上述6行代码实现了Textview能在运行结果显示在任意位置
-->
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/word"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.644"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.558" />
同样可以实现任意位置Textview的另一种方式为:
<!--
android:textColor="#000000"
android:textSize="18sp"
android:gravity="center" 这三行代码定义Textview的文本颜色、字体大小和在元素内部的布局(上下左右居中)
android:layout_marginStart="204dp"
android:layout_marginLeft="204dp"
android:layout_marginTop="256dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" 这几行代码同样可以实现Textview在运行结果显示上处于任意位置
-->
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="204dp"
android:layout_marginLeft="204dp"
android:layout_marginTop="256dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="Hello, World!"
android:textColor="#000000"
android:textSize="18sp"
android:gravity="center"
/>
4.android:和app:和tools:前缀字段的区别
android::引用标准的Android属性;
app::引用自定义属性或支持库属性;
tools::用于设计时属性,帮助布局设计和预览,不影响实际运行的应用程序。
5.在AndroidManifest中声明Activity事件
注册Activity到Manifest清单中:
<activity android:name=".MainActivity"> ==
<activity android:name="com.example.myapp.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Android项目中如果没有正确配置启动Activity(即入口Activity),会导致无法启动应用程序。设置方法如上述代码所示。如果应用中包含多个Activity,只需确保只有一个Activity配置了 MAIN 和 LAUNCHER 的 <intent-filter>。
可以根据需要添加其他属性来配置Activity的行为:
android:label:设置Activity的标签(标题)。
android:theme:设置Activity的主题。
android:screenOrientation:设置Activity的屏幕方向。
注意确保 android:name 属性指向正确的Activity类。如果Activity类位于包中,请使用全限定名或相对路径:
<activity android:name=".MainActivity"> 等价于
<activity android:name="com.example.myapp.MainActivity">
6.构造按钮button元素
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.443" />
在XML文件中定义Button如上述所示,该Button通过倒数5行实现位置自定义。
7.设计button与Textview的交互操作
目标:Button点击实现某个Textview可视化。
首先将一个Textview的显示属性设置为不可见,通过XML文件中给其添加属性实现:
android:visibility="gone"
然后在主活动类(MainActivity.java)中,编写代码来处理按钮的点击事件:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView textv;
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textv = findViewById(R.id.textView3); // R.id.textView3识别id为textView3的元素
button1 = findViewById(R.id.button);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 显示 TextView(可视化)
textv.setVisibility(View.VISIBLE);
// 获取 TextView 的文本
// String text = textv.getText().toString();
// 弹出 Toast弹窗 显示文本信息
// Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
}
}