前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓入门-第三章-安卓常用控件的使用方式

安卓入门-第三章-安卓常用控件的使用方式

作者头像
Fisherman渔夫
发布2020-02-19 11:29:38
1.8K0
发布2020-02-19 11:29:38
举报
文章被收录于专栏:渔夫渔夫

一、安卓常用控件的使用方式

1.1 TextView

 TextView可以说是Android中最简单的一个控件了,你在前面其实已经和它打过一些交道了。它主要用于在界面上显示一段文本信息,比如你在第1章看到的“Hello world!”。下面我们就来看一看关于TextView的更多用法。

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_view" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This is TextView" />

</LinearLayout>

 外面的LinearLayout先忽略不看,下面是上述XML英文组合的具体解释:

英文组合

中文含义

android:id

控件的唯一标识符,用于被活动以R文件属性的方式引用这个控件

android:layout_width

控件的宽度

android:layout_height

控件的高度

“match_parent”

让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小。如果父布局是View,那么宽度就是和手机屏幕一样的宽度。

“wrap_content”

让当前控件的大小能够刚好包含住里面的内容,也就是由控件内容决定当前控件的大小。

android:text

TexyView控件内具体显示的文本内容

android:gravity

控件内文字对齐方式

“center”

垂直和水平均居中,即效果等同于center_vertical:center_vertical

android:textSize=“24sp”

字体大小设置为24sp

android:textColor="#00ff00"

设置字体颜色为:"#00ff00"值

 接下来我们通过android:text 指定TextView中显示的文本内容,现在运行程序,效果如图3.1所示。

在这里插入图片描述
在这里插入图片描述

 虽然指定的文本内容正常显示了,不过我们好像没看出来TextView的宽度是和屏幕一样宽的。其实这是由于TextView中的文字默认是居左上角对齐的,虽然TextView的宽度充满了整个屏幕,可是由于文字内容不够长,所以从效果上完全看不出来。现在我们修改TextView的文字对齐方式,如下所示:

 在中加入:android:gravity ="center"语句就将字符居中了。总结一下:我们使用android:gravity来指定文字的对齐方式,可选值有top 、bottom 、left 、right 、center 等,可以用“|”来同时指定多个值,这里我们指定的center ,效果等同于center_vertical|center_horizontal ,表示文字在垂直和水平方向都居中对齐。现在重新运行程序,效果如图3.2所示。

在这里插入图片描述
在这里插入图片描述

另外我们还可以对TextView中文字的大小和颜色进行修改,如下所示:

同样地,在中加入:android:textSize="24sp"以及android:textColor="#00ff00"

当然TextView中还有很多其他的属性,这里就不再一一介绍了,用到的时候去查阅文档就可以了。

1.2 Buttion

 Button是程序用于和用户进行交互的一个重要控件,相信你对这个控件已经非常熟悉了,因为我们在上一章用了太多次Button。它可配置的属性和TextView是差不多的,所以下标就给出一个不同的属性设置方式:

英文组合

中文含义

android:textAllCaps=“false”

取消字体默认大写的设置

 我们可以在activity_main.xml中这样加入Button:

代码语言:javascript
复制
<Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button"
        />

 虽然再xml配置文件中设置按键名为小写,但是最终在design中显示的却是大写的BUTTON,这是由于系统会对Button中的所有英文字母自动进行大写转换,如果这不是你想要的效果,可以使用如下配置来禁用这一默认特性:加入描述语句:android:textAllCaps="false"

 接下来我们可以在MainActivity中为Button的点击事件注册一个监听器,如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 在此处添加逻辑
            }
        });
    }
}

方式一的具体步骤:

当前活动继承AppCompatActicity类 -> 重写onCreate()方法 -> {调用引入布局方法:setContentView -> 使用findViewById方法根据R文件创建Buttion对象引用 -> Button对象调用setclickListener()方法,参数为重写了Onclick方法的匿名内部类OnClickListener对象{在此编写按键的内部执行逻辑}

 这样每当点击按钮时,就会执行监听器中的onClick() 方法,我们只需要在这个方法中加入待处理的逻辑就行了。如果你不喜欢使用匿名类的方式来注册监听器,也可以使用实现接口的方式来进行注册,代码如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                // 在此处添加逻辑
                break;
            default:
                break;
        }
    }
}

方式二的具体步骤

当前活动继承AppCompatActivity 以及实现了View.OnClickListener(这是定义在View类中的公共接口) -> 重写onCreate()方法 -> {调用引入布局方法:setContentView -> 使用findViewById方法根据R文件创建Buttion对象引用 -> Button对象调用setclickListener()方法,参数为实现了View.OnClickListener接口的当前对象this } ->重写onClick方法{在此添加案件的内部执行逻辑}

 这两种写法都可以实现对按钮点击事件的监听,至于使用哪一种就全凭你的喜好了。

1.3 EditText

英文组合

中文含义

android:hint

小提示

android:maxLines

限制EditText控件的最大行数

 EditText是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。EditText的应用场景非常普遍,在进行发短信、发微博、聊QQ等操作时,你不得不使用EditText。那我们来看一看如何在界面上加入EditText吧,修改activity_main.xml中的代码,如下所示:

代码语言:javascript
复制
    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

 其实看到这里,我估计你已经总结出Android控件的使用规律了,用法基本上都很相似:给控件定义一个id,再指定控件的宽度和高度,然后再适当加入一些控件特有的属性就差不多了。

 所以使用XML来编写界面其实一点都不难,完全可以不用借助任何可视化工具来实现。现在重新运行一下程序,EditText就已经在界面上显示出来了,并且我们是可以在里面输入内容的

 细心的你平时应该会留意到,一些做得比较人性化的软件会在输入框里显示一些提示性的文字,然后一旦用户输入了任何内容,这些提示性的文字就会消失。这种提示功能在Android里是非常容易实现的,我们甚至不需要做任何的逻辑控制,因为系统已经帮我们都处理好了。修改activity_main.xml,如下所示:

 加入新的描述语句:android:hint="Type something here",其中hint就是暗示的意思,效果就是如下图所示:

在这里插入图片描述
在这里插入图片描述

 可以看到,EditText中显示了一段提示性文本,然后当我们输入任何内容时,这段文本就会自动消失。

 不过,随着输入的内容不断增多,EditText会被不断地拉长。这时由于EditText的高度指定的是wrap_content ,因此它总能包含住里面的内容,但是当输入的内容过多时,界面就会变得非常难看。我们可以使用android:maxLines 属性来解决这个问题,修改activity_main.xml,如下所示:

加入描述性语句:

android:maxLines="2"

 这里通过android:maxLines 指定了EditText的最大行数为两行,这样当输入的内容超过两行时,文本就会向上滚动,而EditText则不会再继续拉伸。

 我们还可以结合使用EditText与Button来完成一些功能,比如通过点击按钮来获取EditText中输入的内容。修改MainActivity中的代码,如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        editText = (EditText) findViewById(R.id.edit_text);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                String inputText = editText.getText().toString();
                Toast.makeText(MainActivity.this, inputText, 
                Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }

}

 首先通过findViewById()方法得到EditText的实例,然后在按钮的点击事件里调用EditText的getText()方法获取到输入的内容,再调用toString()方法转换成字符串,最后还是老方法,使用Toast将输入的内容显示出来。

 重新运行程序,在EditText中输入一段内容,然后点击按钮,效果如下图所示。

在这里插入图片描述
在这里插入图片描述

1.4 ImageView

英文组合

中文含义

android:src

指定文件的源,比如说一张图片对应的源

imageView.setImageResource(R.drawable.img_2);

源路径是可以通过活动中的方法修改的,那么一来可能就会导致改变显示的图片

 ImageView是用于在界面上展示图片的一个控件,它可以让我们的程序界面变得更加丰富多彩。学习这个控件需要提前准备好一些图片,图片通常都是放在以“drawable”开头的目录下的。目前我们的项目中有一个空的drawable目录,不过由于这个目录没有指定具体的分辨率,所以一般不使用它来放置图片。这里我们在res目录下新建一个drawable-xhdpi目录,然后将事先准备好的两张图片img_1.png和img_2.png复制到该目录当中。

 接下来修改activity_main.xml,如下所示,加入一下语句:

代码语言:javascript
复制
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_1"
        />

 可以看到,这里使用android:src 属性给ImageView指定了一张图片。由于图片的宽和高都是未知的,所以将ImageView的宽和高都设定为wrap_content ,这样就**保证了不管图片的尺寸是多少,图片都可以完整地展示出来。**重新运行程序,效果如下图所示:

在这里插入图片描述
在这里插入图片描述

 我们还可以在程序中通过代码动态地更改ImageView中的图片,然后修改MainActivity的代码,如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editText;

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        editText = (EditText) findViewById(R.id.edit_text);
        imageView  = (ImageView) findViewById(R.id.image_view);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                imageView.setImageResource(R.drawable.img_2);
                break;
            default:
                break;
        }
    }

}

 在按钮的点击事件里,通过调用ImageView的setImageResource()方法将显示的图片改成img_2,现在重新运行程序,然后点击一下按钮,就可以看到ImageView中显示的图片改变了。

1.5 ProgressBar以及控件的可见性

英文组合

中文含义

android:visibility

控制文件的可见性,有不可见占大小、不可见不占大小、可见等分类

setVisibility()

活动中控制可见性的方法,传入数据为:View.VISIBLE 、View.INVISIBLE 和View.GONE

style

控制进度条的格式,默认的进度条为动态的环形,可以改为拖动条

android:max

用于给拖动条设置最大大小,调用活动的方法时就能改变拖动条的当前值,达到最大值时,拖动条相当于就到了100%

 ProgressBar用于在界面上显示一个进度条,表示我们的程序正在加载一些数据。它的用法也非常简单,修改activity_main.xml中的代码,如下所示:

代码语言:javascript
复制
<ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
在这里插入图片描述
在这里插入图片描述

 这时你可能会问,旋转的进度条表明我们的程序正在加载数据,那数据总会有加载完的时候吧?如何才能让进度条在数据加载完成时消失呢?这里我们就需要用到一个新的知识点:**Android控件的可见属性。**所有的Android控件都具有这个属性,可以通过android:visibility 进行指定,可选值有3种:visible 、invisible 和gone 。

  1. visible 表示控件是可见的,这个值是默认值,不指定android:visibility 时,控件都是可见的。
  2. invisible 表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。
  3. gone 则表示控件不仅不可见,而且不再占用任何屏幕空间。

 我们还可以通过代码来设置控件的可见性,使用的是setVisibility() 方法,可以传入View.VISIBLE 、View.INVISIBLE 和View.GONE 这3种值。

代码语言:javascript
复制
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                if(imageView.getVisibility() == View.INVISIBLE){
                    imageView.setVisibility(View.VISIBLE);
                }else{
                    imageView.setVisibility(View.INVISIBLE);
                }
                break;
            default:
                break;
        }
    }

 通过以上代码就可以通过按钮点击事件来控制图片的显示或不现实,当然此处的代码实现的是不释放原来所占空间的隐藏实现方式。

 另外,我们还可以给ProgressBar指定不同的样式,刚刚是圆形进度条,通过style 属性可以将它指定成水平进度条,修改activity_main.xml中的代码,如下所示:

代码语言:javascript
复制
style="?android:attr/progressBarStyleHorizontal"
android:max="100"

 指定成水平进度条后,我们还可以通过android:max 属性给进度条设置一个最大值,然后在代码中动态地更改进度条的进度。修改MainActivity中的代码,如下所示:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    ...

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                int progress = progressBar.getProgress();
                progress = progress + 10;
                progressBar.setProgress(progress);
                break;
            default:
                break;
        }
    }

}

1.6 AlertDialog

 AlertDialog可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般都是用于**提示一些非常重要的内容或者警告信息。**比如为了防止用户误删重要内容,在删除前弹出一个确认对话框。下面我们来学习一下它的用法,修改MainActivity中的代码,如下所示:

代码语言:javascript
复制
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.
                        this);
                dialog.setTitle("This is Dialog");
                dialog.setMessage("Something important.");
                dialog.setCancelable(false);
                dialog.setPositiveButton("OK", new DialogInterface.
                        OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"You clicked OK",Toast.LENGTH_SHORT).show();
                    }
                });
                dialog.setNegativeButton("Cancel", new DialogInterface.
                        OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"You clicked Cancel",Toast.LENGTH_SHORT).show();

                    }
                });
                dialog.show();
                break;
            default:
                break;
        }
    }

代码的分析:如上点击警告栏只是在做了打印出相关Toast提示。

  1. 首先通过AlertDialog.Builder创建一个AlertDialog的实例
  2. 然后可以为这个对话框设置标题、内容、可否用Back键关闭对话框等属性
  3. 接下来调用setPositiveButton() 方法为对话框设置确定按钮的点击事件(对应于确定OK按键)
  4. 调用setNegativeButton() 方法设置取消按钮的点击事件(对应于Cancel按键)
  5. 最后调用show() 方法将对话框显示出来。重新运行程序

1.7 ProgressDialog

 ProgressDialog和AlertDialog有点类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog会在对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心地等待。它的用法和AlertDialog也比较相似,修改MainActivity中的代码,如下所示:

代码语言:javascript
复制
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                ProgressDialog progressDialog = new ProgressDialog
                        (MainActivity.this);
                progressDialog.setTitle("This is ProgressDialog");
                progressDialog.setMessage("Loading...");
                progressDialog.setCancelable(true);
                progressDialog.show();
                break;
            default:
                break;
        }
    }

 可以看到,这里也是先构建出一个ProgressDialog 对象,然后同样可以设置标题、内容、可否取消等属性,最后也是通过调用show()方法将ProgressDialog显示出来。重新运行程序,点击按钮后,效果如下图所示。

在这里插入图片描述
在这里插入图片描述

 注意,如果在setCancelable() 中传入了false ,表示ProgressDialog是不能通过Back键取消掉的,这时你就一定要在代码中做好控制,当数据加载完成后必须要调用ProgressDialog的dismiss() 方法来关闭对话框,否则ProgressDialog将会一直存在。

 好了,关于Android常用控件的使用,我要讲的就只有这么多。一节内容就想覆盖Android控件所有的相关知识不太现实,同样一口气就想学会所有Android控件的使用方法也不太现实。本节所讲的内容对于你来说只是起到了一个引导的作用,你还需要在以后的学习和工作中不断地摸索,通过查阅文档以及网上搜索的方式学习更多控件的更多用法。当然,当本书后面涉及一些我们前面没学过的控件和相关用法时,我仍然会在相应的章节做详细的讲解。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、安卓常用控件的使用方式
    • 1.1 TextView
      • 1.2 Buttion
        • 1.3 EditText
          • 1.4 ImageView
            • 1.5 ProgressBar以及控件的可见性
              • 1.6 AlertDialog
                • 1.7 ProgressDialog
                相关产品与服务
                短信
                腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档