虽然Android studio提供了相应的可视化编辑器,允许使用拖放控件的方式来编写布局,并能在视图上直接修改控件的属性,但是这样不能真正的去了解界面的实现原理,所以我们学习用最基本的方式去实现,即编写xml代码,接下来我们了解几种常用控件吧!
TextView
作用:在界面上显示一段文本信息。
id:给当前控件定义了一个唯一标识符。
match parent:让当前控件的大小与父布局的大小一样。
wrap_content:让当前控件的大小刚好包含住里面的内容。
<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" //文字的大小,sp是单位
android:textColor="#c444ff" //文字的颜色
android:text="This is TextView" /> //指定显示的内容
</LinearLayout>
Button
button是按钮,是程序和用户交互的一个重要控件。它的可配置属性和text view一样。
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:textAllCaps="false"//是否对button中的所有英文字母自动进行大小写转换
/>
接下来在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) {
//此处添加逻辑
}
});
}
}
EditText
作用:它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Type something here" //指定了一段提示性文本
android:maxLines="2"/> //指定了最大行数为两行,继续输入时文本向上滚动
可以结合button和EditText完成一些功能,比如点击按钮获取输入的内容,使用toast将内容显示出来。
public class MainActivity extends AppCompatActivity {
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
作用:在界面上展示图片。
在res目录下新建一个drawable-xhdpi文件夹,放入两张图片img_1.png和img_2.png。
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img_1"/> //指定一张图片
我们设置通过点击按钮,更改图片
public class MainActivity extends AppCompatActivity {
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;
}
}
}
ProgressBar
作用:在界面上显示一个进度条,表示程序正在加载数据。
可以是圆形,也可以指定为水平形式。
所有的Android控件都有一个属性:可见性属性。通过android:visibility进行指定,有三个值:visible(表示控件可见)、invisible(表示控件不可见,相当于变为透明状态)、gone(控件不可见,而且不再占用任何屏幕空间)。
下来通过按钮点击,使进度条消失并重现。
public class MainActivity extends AppCompatActivity {
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;
}
}
}
AlertDialog
作用:可以在当前界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能屏蔽其他控件的交互能力,所以这个控件用于提示一些非常重要的内容或者警告信息。
public class MainActivity extends AppCompatActivity {
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(new 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{
}
});
//调用show方法将对话框显示出来
dialog.show();
break;
default:
break;
}
}
}
ProgressDialog
作用:在对话框内显示进度条,表示耗时操作,让用户耐心等待。
用法也与AlertDialog相似
//弹出对话框,显示进度条
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("This is ProgressDialog");
progressDialog.setMessage("Loading");
progressDialog.setCancelable(true);
progressDialog.show();
最后显示一下运行结果,
到这里常用控件就介绍完啦,随着学习的推进,我们会遇到更多的控件的用法,学习就是一个不断积累的过程!