一、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 来指定文字的对齐方式。match_parent 表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小wrap_content 表示让当前控件的大小能够刚好包含住里面的内容,也就是由控件内容决定当前控件的大小。所以上面的代码就表示让TextView的宽度和父布局一样宽,也就是手机屏幕的宽度,让TextView的高度足够包含住里面的内容就行。当然除了使用上述值,你也可以对控件的宽和高指定一个固定的大小,但是这样做有时会在不同手机屏幕的适配方面出现问题。另外我们还可以对TextView中文字的大小(textSize)和颜色(textColor)进行修改。在Android中字体大小使用sp作为单位。
二、Button
系统会对Button中的所有英文字母自动进行大写转换,如果这不是你想要的效果,可以使用如下配置来禁用这一默认特性:
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是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。
android:hint="Type something here"
能够实现在输入框里显示一些提示性的文字,然后一旦用户输入了任何内容,这些提示性的文字就会消失。
不过,随着输入的内容不断增多,EditText会被不断地拉长。这时由于EditText的高度指定的是wrap_content ,因此它总能包含住里面的内容,但是当输入的内容过多时,界面就会变得非常难看。我们可以使用android:maxLines 属性来解决这个问题:
android:maxLines="2"
这里通过android:maxLines 指定了EditText的最大行数为两行,这样当输入的内容超过两行时,文本就会向上滚动,而EditText则不会再继续拉伸。
我们还可以结合使用EditText与Button来完成一些功能,比如通过点击按钮来获取EditText中输入的内容:
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将输入的内容显示出来。
四、ImageView
ImageView是用于在界面上展示图片的一个控件,图片通常都是放在以“drawable”开头的目录下的。用法:
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img_1 "
/>
将ImageView的宽和高都设定为wrap_content ,这样保证了不管图片的尺寸是多少,图片都可以完整地展示。
我们还可以在程序中通过代码动态地更改ImageView中的图片:
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中显示的图片改变了。
五、ProgressBar(普通进度圆圈)
ProgressBar用于在界面上显示一个进度条,表示程序正在加载一些数据。用法:
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
运行程序,会看到屏幕中有一个圆形进度条正在旋转。
如何才能让进度条在数据加载完成时消失呢?这里我们就需要用到一个新的知识点:
Android控件的可见属性。所有的Android控件都具有这个属性,可以通过android:visibility 进行指定,可选值有3种:visible 、invisible 和gone。visible 表示控件是可见的,这个值是默认值,不指定android:visibility 时,控件都
是可见的。invisible 表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。gone 则表示控件不仅不可见,而且不再占用任何屏幕空间。我们还可以通过代码来设置控件的可见性,使用的是setVisibility() 方法,可以传入View.VISIBLE、View.INVISIBLE 和View.GONE 这3种值。
尝试实现,点击一下按钮让进度条消失,再点击一下按钮让进度条出现的这种效果:
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 属性可以将它指定成水平进度条:
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
指定成水平进度条后,我们还可以通过android:max 属性给进度条设置一个最大值,然后在代码中动态地更改进度条的进度:
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作为更新后的进度。
六、AlertDialog(直接使用,无需写在布局文件)
AlertDialog可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般都是用于提示一些非常重要的内容或者警告信息。比如为了防止用户误删重要内容,在删除前弹出一个确认对话框。用法:
@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会在对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心地等待。
用法:
@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控件的用法基本上都很相似:给控件在布局文件定义一个id,再指定控件的宽度和高度,然后再适当加入一些控件特有的属性就差不多了。