Android学习笔记(二):TextView显示Hello World
你可能很好其,界面显示的Hello World到底在哪写的呢!
一、 XML布局文件
Android将代码逻辑实现与界面布局分开,这样当你只想使用代码逻辑又不想使用它对应的布局时,就可以很方便的调用。XML文件就是用于布局界面的,如按钮、文本显示等等布局。
二、activity_main.xml布局文件
打开文件 项目/app/src/main/res/layout/activity.xml ,你就可以看到“Hello World”(在这里简单说明以下,res/layout/ 目录下主要存放各种xml布局文件)。如果你点开不是显示的代码,就点击如图所示右上角的 Code 按钮,其中Design中,可以直接拖动或者选择各种选项设计,达到我们想要的界面,但是这样不方便我们了解原理和逻辑,也不便于app适配各种设备,因为当你将这个应用安装到其他尺寸手机时,布局就会变得不一样了。Split中可以很方便我们看到当前代码设计的布局到底是什么样式的。
以上这些内容、语法,你都很陌生,我们先改为以下的内容
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
</LinearLayout>
这些语法就相对比较简单了,我们简单分析一下,如果不够清楚,也不要急,后面学习过程中会逐渐明白。
<?xml version="1.0" encoding="utf-8"?> 很明显是对xml文件格式和版本的说明。
1、LinearLayout 线性布局
<LinearLayout ... > ... </LinearLayout> 表明这是一种线性布局(linear layout),注意尖括号要互相对应。第一对尖括号中主要是对该线性布局整体的布局设计,而第二对尖括号表示这个线性布局的结束。
xmlns:android="http://schemas.android.com/apk/res/android" xmlns表示xml命名空间(name space),因此,你可以看到后面的语句 中都包含了 android: 字样。
android:layout_width和height 从名字上看就能明白其表示布局的宽高,而其值match_parent则表示匹配整个界面。
android:orientation="vertical" 该句语法用于设计布局整体排布,vertical表示垂直排布,当你有多个要显示的文本内容或者按钮等,都会垂直依次从上往下排。
android:gravity="center" 该句语法表示对齐模式,center则表示中心对齐,因此你看到hello world在界面中心。
2、TextView 文本内容显示器
<TextView ... /> 表明这是一个用于显示文本内容的布局工具。通过LinearLayout 和 TextView 你可以发现尖括号的作用以及使用,<.../> 或者 <N ... ></N>。你不妨尝试着修改一下。
android:layout_width和height 我猜你已经掌握其含义了吧。
android:text="Hello World!" 显然这是显示内容的语法,你不妨修改其内容试试。
三、MainActivity 代码实现逻辑
前面说了,布局与代码逻辑是分开实现的,那我们怎样将设计的界面布局传入代码中呢!打开Java文件:项目/app/src/main/java/com.example.myapplication/MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
简单分析一下代码,首先要创建一个类,并继承于 AppCompatActivity 这样系统才能识别这个类为activity类。此外,我们需要重写onCreate函数,并继承父类逻辑实现,再添加一句setContentView(R.layout.activity_main); 而 这句语法就是将布局设计传入这个活动中,这样代码逻辑和界面布局就联系在一起了。其中R.layout.activity_main 就表示activity_main.xml布局文件。
四、 修改TextView 显示内容
你可能会好奇,TextView中test的内容写死的话,如果我们移植到其他地方,只想要布局,但不想要显示内容,岂不是不方便移植。那我们来看怎样修改其内容吧。
1、strings.xml文件
打开strings.xml文件:项目/app/src/main/res/values/strings.xml,value目录下存放各种值,方便我们定义和获取。strings.xml中则存放各种string值。存放的方式就类似于键值对。
<resources>
<string name="app_name">My Application</string>
</resources>
文件中显示的这句代码,就是表示引用app_name就显示My Application。app_name你应该猜到是app的名字吧。在这里定义了,怎么引用它呢。打开文件AndroidManifest.xml文件
可以看到一句android:label="@string/app_name" 该句语法就是引用strings.xml文件中的app_name值。
了解到了strings.xml文件的作用,我们不妨在里面添加一句代码,待后面我们从布局中引用它。
<resources>
<string name="app_name">My Application</string>
<string name="hello">hello world!</string>
</resources>
我猜你现在应该很清楚怎么引用strings.xml文件中的值,那么在activity_main.xml布局文件中的TextView引用它吧,修改Hello World! 为 @string/hello,代码如下所示。发布到手机上看看效果吧。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"/>
2、代码实现内容
我们还可以在代码逻辑中修改内容,覆盖布局文件中的内容。当然,我们可以在布局文件中不设置内容,而在代码逻辑中实现内容。首先,我们需要在TextView中添加id,如下所示
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"/>
android:id="@+id/text" 该句语法表示给TextView增加id,这样就可以在activity中通过id引用它,然后对其进行修改。打开MainActivity.java,修改代码,如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.text);
textView.setText("Hello Android!");
}
}
首先,创建一个TextView 对象,并通过findViewById(R.id.text) 获取到TextView布局对象,text就是刚刚我们设置的id。然后通过textView.setText("Hello Android!"); 将Hello World! 修改为了Hello Android! 将app发布到手机看一下效果吧。
五、总结
通过本章学习,你学习到了布局与代码逻辑之间的关系,知道线性布局、TextView,以及hello world语句是怎样显示到界面上,最后我们也了解到了对TextView中的text内容的修改方法。