TextView用来显示文本的信息
这个 可以说是安卓里面最简单的一个控件啦,在empty里面显示的hello world其实就是用的我们TextView这个控件
这是我们学习的第一个控件,我们在前一篇博客里面讲述了如何在java代码里面去调用我们的布局文件,那就是在MainActivity里面使用重写的onCreate方法。具体的可以参考博客:
Android Studio基础工作流程-xml布局文件如何调用显示-CSDN博客
控件的使用思路和布局文件的使用思路差不多,都是在xml布局文件中设置相应的控件以及属性,然后在java里面通过代码找到你添加的这个控件,然后进行一系列操作。但是如何在代码里面找到呢?接下来通过代码来逐一讲解。。
我们都知道,我们一个人类,有身高,体重,姓名...等等这些信息。通过身高,体重可以知道你这个人的体型大概是什么样子的,通过名字呢,可以叫你让你有回应,通过身份证号码呢,可以通过人口局搜索联系到你。那么对于一个组件来说,他也有类似的属性,只不过在程序的世界,这些称呼需要改一改。
控件的属性
以TextView控件为例
先看一下在xml布局文件里面的形式:
<TextView
android:id="@+id/tv_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello nihao"
android:background="#000000"
android:textColor="#ffffff"
android:gravity="center"
tools:ignore="MissingConstraints"
android:layout_gravity="center"
/>
控件的身份证——id
android:id="@+id/tv_1"
形式如上,后面的tv_1就表示是这个控件制定的唯一id
控件的身高体重 ——layout_height和layout_width
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout_width和layout_height比较好理解,一个用来设置这个控件的宽度,一个设置控件的高度。后面“=”符号来表示想要设置成的样式
而我们看到了后面设定的值——“wrap_content”,这个右表示什么意思呢?我们知道,wrap是包裹的意思,而content是内容的意思,和在一起就变成了‘包裹住内容’。那么这就好理解了,当我们把后面的值设置成wrap_content的时候,就表明这个控件的宽度和高度将根据控件里面的内容来进行变化。我们来看一个具体的代码感受一下。
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="鱼皮你好"
android:background="@color/black"
android:textColor="#ffffff"
/>
我们将text的内容设置成了“鱼皮你好”
当我们增加字数的时候,这个控件的高度和宽度就会随着字数的增加而进行变化
前三个属性我们说完了,细心的同学可能会注意到,下面还有一些其他的属性。这就像,我们除了有自己的身高体重,姓名之外,我们还有自己的喜好,兴趣爱好等等,喜欢漂亮的衣服。
android:text="鱼皮你好" -->这个大家应该都能看得出来,是用来设置TextView控件里面的内容
android:background="" -->用来设置文本控件的背景
android:textColor="#ffffff" -->用来设置字体的颜色
使用这些属性可以对控件进行美化,进行设计。当然这些属性的值有很多很多,具体的可以参考官方文档:Android API reference | Android Developers
通过代码使用控件
找到控件
简单介绍完了TextView控件,让我们回到上面的问题。我们是不是添加了一个自己想要的TextView控件?那么如何去调用这个控件呢?让这个控件能够按照我们的想法去做一些事情。
要想控件能够按照我们的意愿去做些事情,第一步是不是需要找到这个控件?这个很简单,我们刚刚是不是设置了控件的身份证,也就是id?那我们是不是就可以通过控件的id来找到这个控件?具体的来看我们的代码:
在MainActivity.java代码里面:
package com.example.test01;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestActivity extends AppCompatActivity {
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
TextView tv_1 = (TextView) findViewById(R.id.tv_1);
}
}
仔细观察,你发现了啥?我们是不是在代码里面发现了这样的一条语句:
TextView tv_1 = (TextView) findViewById(R.id.tv_1);
这条语句表示什么意思嘞?在Android给我们提供的开发的包里面,已经事先定义好了像TextView,Button这些控件,并且封装成了一个类,那我们在开发的时候,直接去调用就可以啦。所以我们先写了一个TextView tv_1。熟悉java开发的小伙伴应该都知道,这是在实例化一个类,后面的tv_1是实例化出来对象的名字。正常来说,java里面实例化一个类是不是需要用到new xxx。但是呢,安卓提供的开发包里面有一个findViewById();方法,这个方法会返回一个View类型的对象,但是这里你只需要记住,这个方法,可以返回一个实例化的控件对象。当然为了严谨,我们再加一个强制转换。(当然现在版本的安卓开发不需要这么去做了)在参数列表里面,我们传入R.id.tv_1
这个tv_1,是不是有点熟悉,这个是不是我们之前给TextView设置的身份证号码?唉?那这样是不是就可以通过我们设置的身份证号码来找到我们的控件了?答案是肯定的。那这前面的R又是什么鬼?这个是安卓里面的R文件,这个文件能够唠的那可就多了,这里我们暂且不做赘述。
使用控件
前面我们成功通过id联系上了这个控件!那么下面,我们改如何对这个控件发号施令?
很简单很简单,看我操作。
设置内容
package com.example.test01;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestActivity extends AppCompatActivity {
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
TextView tv_1 = (TextView) findViewById(R.id.tv_1);
tv_1.setText("鱼皮我爱你");
}
}
我们得到了tv_1这个控件的对象,通过调用里面setText的方法,就可以重新设置里面的内容。这里我用了“重新”两个字。为什么?因为在之前控件的属性里面,已经设置了TextView的值,在java代码里面,当然是又重新设置了一遍。运行之后,我们可以发现:
文字真的改变了。
除了设置文字内容,我们还可以set很多东西。大家可以慢慢探索
获取内容
通过使用getText()这个方法,我们就可以获取到文本控件里面的内容。
这里,我们添加了两个文本控件
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="鱼皮你好,你好鱼皮"
android:background="@color/black"
android:textColor="#ffffff"
android:layout_gravity="center"
/>
<TextView
android:id="@+id/tv_2"
android:layout_width="match_parent"
android:layout_height="80px"
android:text=""
android:layout_gravity="center"
/>
</LinearLayout>
在java代码里面,我们获取第一个文本控件的内容,然后将内容添加到第二个文本控件里面。
package com.example.test01;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestActivity extends AppCompatActivity {
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
TextView tv_1 = (TextView) findViewById(R.id.tv_1);
TextView tv_2 = (TextView) findViewById(R.id.tv_2);
String tx1 = (String) tv_1.getText();//获取第一个控件的内容
tv_2.setText(tx1);//设置第二个控件的内容
}
}
这个就很简单啦,大家可以自己试一试
除了getText(),我们还可以get很多东西
我们这里呢,详细说一下getId(),这个方法。
我们先来看一下findViewById()这个方法,点击进去之后
我们惊奇的发现,参数列表里面需要的参数竟然是int类型的数!!这是不是就意味着R.id.tv_1这个我们穿进去的参数,他也是一个int类型的数。再进一步,如果我们直接传进去一个int类型的数字,只要这个数字和R.id.tv_1这个数字是一样的,是不是一样也能够找到控件?比如我们这样子写:
TextView tv_1 = (TextView) findViewById(21325232);
当然里面的数字是我随便写的。可是如果如果如果,这个数字能够和R.id.tv_1对应上,理论上是不是也能够联系到我们的控件?理论上是这样的。而getId();这个方法,返回的就是这么一个数字,因此我才说,id,就是控件的身份证号,因为本质上,他就是一串数字嘛。所以用身份证号码来形容再贴切不过了。
System.out.println(tv_2.getId());
我们不妨来试一试
哎嘿,我们得到了这个id,我们再来试一试
package com.example.test01;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestActivity extends AppCompatActivity {
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
TextView tv_1 = (TextView) findViewById(R.id.tv_1);
TextView tv_2 = (TextView) findViewById(2131231325);
System.out.println(tv_2.getId());
String tx1 = (String) tv_1.getText();//获取第一个控件的内容
tv_2.setText(tx1);//设置第二个控件的内容
}
}
用这个数字传入参数里面,再运行一下
成功啦!!这就说明,通过合法的数字,一样也能够找到我们添加并且设置好id的控件。
好啦,那么以上就是这片文章的全部内容啦!!创作不易,还请点赞,关注,转发!!!谢谢大家!!!