Android学习笔记(七)——常见控件

  //此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!

  Android 给我们提供了大量的 UI控件,下面我们简单试试几种常用的控件。

一、TextView

  在布局文件中加入TextView元素:

1 <TextView android:text="This is TextView!"
2         android:gravity="center"
3         android:layout_width="match_parent"
4         android:layout_height="wrap_content"
5         android:textSize="34sp"
6         android:textColor="#000000"/>

  代码的意思显而易见,id是当前控件的唯一标识符,text是所要显示的文本内容,width和height可以控制控件的宽和高,一般有三种可选值: match_parent、fill_parent 和 wrap_content,其中 match_parent 和fill_parent的意义相同。match_parent 表示让当前控件的大小和父布局的大小一样。wrap_content 表示让当前控件的大小能够刚好包含住里面的内容,也就是由控件内容决定当前控件的大小。我们也可以对控件的宽和高指定一个固定的大小,但是这样做有时会在不同手机屏幕的适配方面出现问题。TextView的文本是默认左上角对齐的,但我们可以使用 android:gravity来指定文字的对齐方式, 可选值有 top、 bottom、 left、 right、 center等 , 可 以 用 “ | ” 来 同 时 指 定 多 个 值 , 这 里 我 们 指 定 的 "center" , 效 果 等 同 于"center_vertical|center_horizontal",表示文字在垂直和水平方向都居中对齐。另外textSize用于指定字体大小,textColor用于指定字体颜色。此时的PreView界面是这样的:

  

二、Button

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

1 <Button
2     android:id="@+id/button"
3     android:layout_width="match_parent"
4     android:layout_height="wrap_content"
5     android:text="Button" />

  在主活动中我们可以使用匿名类为button注册一个监听器,当然也可以使用实现接口的方式。

三、EditText

  EditText 是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理,应用场景普遍。我们在布局文件中加入下列代码:

1  <EditText
2         android:id="@+id/edit_text"
3         android:layout_width="match_parent"
4         android:layout_height="wrap_content"
5         android:hint="Type something here"
6         android:textSize="24sp"
7         android:maxLines="2"
8     />

  其中的hint用于在输入框里显示一些提示性的文字,然后一旦用户输入了任何内容,这些提示性的文字就会消失。而maxLines则是限定了 EditText的最大行数为两行,这样当输入的内容超过两行时,文本就会向上滚动,而 EditText 则不会再继续拉伸。效果如下:

        

  输入文本超过两行时:

  

  自然,我们可以结合 EditText 与 Button 来完成一些功能,比如当想要通过点击按钮来获取EditText中输入的内容,可以加入下列代码:

 1 public class MainActivity extends Activity implements OnClickListener {
 2     private Button button;
 3     private EditText editText;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7     super.onCreate(savedInstanceState);
 8     setContentView(R.layout.activity_main);
 9     button = (Button) findViewById(R.id.button);
10 
11     editText = (EditText) findViewById(R.id.edit_text);
12     button.setOnClickListener(this);
13     }
14 
15     @Override
16     public void onClick(View v) {
17         switch (v.getId()) {
18         case R.id.button:
19             String inputText = editText.getText().toString();
20             Toast.makeText(MainActivity.this, inputText,Toast.LENGTH_SHORT).show();
22             break;
23         default:
24             break;
25         }
26     }
27 }

  此时编辑完代码后,按下button,屏幕下方就会弹出所编辑好的文本内容。

四、ImageView

  ImageView是用于在界面上展示图片的一个控件,使用这个控件之时,我们需要先把一张图片放到 drawable文件夹下(我放的图片是pic.jpg),然后加入下列代码:

1 <ImageView
2     android:id="@+id/image_view"
3     android:layout_width="wrap_content"
4     android:layout_height="wrap_content"
5     android:src="@drawable/pic"
6 />

  其中src语句是对图片资源的引用。由于图片的宽和高都是未知的,所以将 ImageView的宽和高都设定为 wrap_content,这样保证了不管图片的尺寸是多少都可以完整地展示出来。现在运行程序后便可看到图片展示在屏幕上。

五、ProgressBar

  ProgressBar用于在界面上显示一个进度条, 表示我们的程序正在加载一些数据。

1 <ProgressBar
2         android:id="@+id/progress_bar"
3         android:layout_width="match_parent"
4         android:layout_height="wrap_content"
5         style="?android:attr/progressBarStyleHorizontal"
6         android:max="100"
7         /> 

   我们使用style将其指定成水平进度条,并通过 android:max 属性给进度条设置一个最大值,然后我们便可以在代码中动态地更改进度条的进度。在此之前,我们需要用到 Android控件的可见属性。 所有的Android控件都具有这个属性, 可以通过android:visibility进行指定,可选值有三种,visible、invisible 和 gone。visible 表示控件是可见的,这个值是默认值。invisible 表示控件不可见,但是它仍然占据着原来的位置和大小。gone 则表示控件不仅不可见,而且不再占用任何屏幕空间。我们可以通过代码来设置控件的可见性,使用的是setVisibility()方法,可以传入 View.VISIBLE、View.INVISIBLE 和 View.GONE三种值。现在我们修改MainActivity的代码如下:

 1 public class MainActivity extends Activity implements View.OnClickListener {
 2     private Button button;
 3     private ProgressBar progressBar;
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.content_main);
 8         button = (Button) findViewById(R.id.button);
 9         progressBar = (ProgressBar) findViewById(R.id.progress_bar);
10         button.setOnClickListener(this);
11     }
12     @Override
13     public void onClick(View v) {
14         switch (v.getId()) {
15             case R.id.button:
16                 int progress = progressBar.getProgress();
17                 progress = progress + 25;
18                 progressBar.setProgress(progress);
19                 break;
20             default:
21                 break;
22         }
23     }
24 }
View Code

  代码中我们设定progressbar的最大值为100,每按一次按钮其值增加25,图为按了两次按钮的效果图:

  

  

六、AlertDialog

  AlertDialog可以在当前的界面弹出一个对话框, 这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此一般 AlertDialog 都是用于提示一些非常重要的内容或者警告信息。

  我们加入代码如下:

 1 @Override
 2     public void onClick(View v) {
 3         switch (v.getId()) {
 4             case R.id.button:
 5                 AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
 6                 dialog.setTitle("This is Dialog");
 7                 dialog.setMessage("Something important.");
 8                 dialog.setCancelable(false);
 9                 dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
10                     @Override
11                     public void onClick(DialogInterface dialog, int which) {
12                     }
13                 });
14                 dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
15                     @Override
16                     public void onClick(DialogInterface dialog, int which) {
17                     }
18                 });
19                 dialog.show();
20                 break;
21             default:
22                 break;
23         }
24     }
View Code

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

  运行效果如下:

  

  控件的学习在此先告一段落,其他的有需要可以在网上搜一下。

 

  //End.

posted @ 2016-04-11 22:14  Vincent_Bryan  阅读(306)  评论(0编辑  收藏  举报