目录

TextView

Button

EditText

ImageView

ProgressBar

AlertDialog

 ProgressDialog


TextView

主要用于在界面上显示一段文本信息。

简单使用的代码如下:

        <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是一种比较简单的布局方式——线性布局。在TextView中我们使用android:id给当前控件定义了一个唯一标识符;然后使用android:layout_width和android:layout_height指定了控件的宽度和高度,Android中所有的控件都具有这两个属性,可选值有3种:match_parent、fill_parent和wrap_content。其中match_parent和fill_parent的意义相同,现在官方更加推荐使用match_parent。match_parent表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小。wrap_content表示让当前控件的大小能够刚好包含住里面的内容,也就是由控件内容决定当前控件的大小。当然除了使用上述值,你也可以对控件的宽和高指定一个固定的大小,但是这样做有时会在不同手机屏幕的适配方面出现问题。

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

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

        <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:gravity="center"
                android:text="This is TextView" />
        </LinearLayout>

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

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

        <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:gravity="center"
                android:textSize="24sp"
                android:textColor="#00ff00"
                android:text="This is TextView" />
        </LinearLayout>

通过android:textSize属性可以指定文字的大小,通过android:textColor属性可以指定文字的颜色,在Android中字体大小使用sp作为单位。

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

Button

Button是程序用于和用户进行交互的一个重要控件,它可配置的属性和TextView是差不多的,我们可以这样加入Button:

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
            <Button
                android:id="@+id/button"
                android:layout width="match parent"
                android:layout height="wrap content"
                android:text="Button" />
        </LinearLayout>

加入Button之后的界面如图所示:

 细心的你可能会留意到,我们在布局文件里面设置的文字是“Button”,但最终的显示结果却是“BUTTON”。这是由于系统会对Button中的所有英文字母自动进行大写转换,如果这不是你想要的效果,可以使用如下配置来禁用这一默认特性:

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button"
            android:textAllCaps="false" />

 即设置android:textAllCaps属性为"false",禁止自动将文本转换为大写。

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

        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) {
                        // 在此处添加逻辑
                    }
                });
            }
        }

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

        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;
                }
            }
        }

EditText

EditText也是程序和用户进行交互的重要控件,它允许用户在控件中输入和编辑内容,并可以在程序中对这些内容进行处理。EditText的应用场景非常广泛,例如当我们编辑短信时用的就是EditText控件。使用EditText控件的代码如下:

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
            <EditText
                android:id="@+id/edit_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Type something here"
                android:maxLines="2"
                />
        </LinearLayout>

上述代码中,依旧为控件指定了id、layout_width和layout_height,然后通过android:hint属性为EditText设置了提示性文本,通过android:maxLines属性为EditText设置了最大显示行数。

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

        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;
                }
            }
        }

ImageView

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

接下来修改activity_main.xml,如下所示:

    <ImageView
        android:id="@+id/image_view"
        android:src="@drawable/xiaoti"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ImageView>

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

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

        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.ye);
                        break;
                    default:
                        break;
                }
            }
        }

ProgressBar

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

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            ...
            <ProgressBar
                android:id="@+id/progress_bar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                />
        </LinearLayout>

重新运行程序,会看到屏幕中有一个圆形进度条正在旋转,如图所示:

 这时你可能会问,旋转的进度条表明我们的程序正在加载数据,那数据总会有加载完的时候吧?如何才能让进度条在数据加载完成时消失呢?这里我们就需要用到一个新的知识点:Android控件的可见属性。所有的Android控件都具有这个属性,可以通过android:visibility进行指定,可选值有3种:visible、invisible和gone。visible表示控件是可见的,这个值是默认值,不指定android:visibility时,控件都是可见的。invisible表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。gone则表示控件不仅不可见,而且不再占用任何屏幕空间。我们还可以通过代码来设置控件的可见性,使用的是setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE和View.GONE这3种值。

接下来我们就来尝试实现,点击一下按钮让进度条消失,再点击一下按钮让进度条出现的这种效果。修改MainActivity中的代码,如下所示:

        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
            private EditText editText;
            private ImageView imageView;
            private ProgressBar progressBar;
            @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);
                progressBar = (ProgressBar) findViewById(R.id.progress bar);
                button.setOnClickListener(this);
            }
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.button:
                        if (progressBar.getVisibility() == View.GONE) {
                            progressBar.setVisibility(View.VISIBLE);
                        } else {
                            progressBar.setVisibility(View.GONE);
                        }
                        break;
                    default:
                        break;
                }
            }
        }

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

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:progressBarStyleHorizontal"
        android:max="100"
        ></ProgressBar>

然后我们可以在代码中动态地更改进度条的进度。修改MainActivity中的代码,如下所示:

        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;
                }
            }
        }

上述代码实现了每点击一次按钮,我们就获取进度条的当前进度,然后在现有的进度上加10作为更新后的进度。运行程序点击几次按钮后效果如图:

 ProgressBar还有几种其他的样式,你可以自己去尝试一下。

AlertDialog

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

        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
            ...
            @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) {
                                // 点击确定按钮后执行的逻辑代码
                            }
                        });
                        dialog.setNegativeButton("Cancel", new DialogInterface.
                            OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 点击取消按钮后执行的逻辑代码
                            }
                        });
                        dialog.show();
                        break;
                    default:
                        break;
                }
            }
        }

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

 ProgressDialog

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

        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
            ...
            @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将会一直存在。

常用的控件就介绍到这里,谢谢观看~ 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐