文章目录
- TextView 控件:文本信息
- Button 控件:按钮
- EditText 控件:输入框
- ImageView 控件:图片
- ProgressBar 控件:进度条
- AlertDialog 控件:提示框
- ProgressDialog 控件:带有进度条的提示框
TextView 控件:文本信息
TextView
是 Android 中较常用的一个控件。主要用于在界面上显示一段文本信息,配置在每个活动的 xml
文件中。除了之前用到的 android:id
、android:layout_width
、android:layout_height
三种属性,下面三种属性也比较常用:
- android:gravity :文字对齐方式,可选值有
top
、bottom
、left
、right
、center
等,可以用|
来同时指定多个值。 - android:textSize :文字大小,以
sp
为单位。 - android:textColor:文字颜色。
Button 控件:按钮
此前我们可能经常困扰于 Button
上的英文字母总是全部大写,这是由于默认配置会对所有英文字母自动进行大写转换,如果不想要我们可以使用这样的配置:
<Button android:textAllcaps="false"/>
以往的博客里通常使用匿名类来注册监听器:
Button button = (Button) findViewById(R.id.button_1);
button.setOnClickListener(new View.OnClickListener() { // 匿名类 new View.OnClickListener()@Overridepublic void onClick(View v) {//添加逻辑}
});
如果不想用匿名类来注册,也可以用实现接口的方式来注册:
// implements 继承 View.OnClickListener 接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {//...Button button = (Button) findViewById(R.id.button_1);button.setOnClickListener(this);// this 即 implements View.OnClickListener 的具体实现}@Overridepublic void onClick(View v){switch (v.getId()){case R.id.button_1://添加逻辑break;default:break;}}
}
EditText 控件:输入框
EditText
允许用户在控件里输入和编辑内容,并且可以在程序中对这些内容进行处理:
<EditTextandroid:id="@+id/edit_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="Type Something Here"android:maxLines="2" />
运行结果:
- android:hint :在文本框中出现的提示文字。一旦用户输入,提示就会消失。
- android:maxLines :限制文本框的最大行数。当输入内容增多时,
EditText
会不断拉长,界面就会非常难看。本例中,输入超过两行,文本就会向上滚动,EditText
就不会再继续拉伸。
还可以结合 EditText
和 Button
来完成一些功能,比如点击按钮来获取 EditText
中输入的内容:
public class MainActivity extends AppCompatActivity {private Button button;private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button_1);editText = (EditText) findViewById(R.id.edit_text); button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String inputText = editText.getText().toString();Toast.makeText(FirstActivity.this, inputText, Toast.LENGTH_SHORT).show();}});}
}
- 首先通过
findViewById()
方法得到 EditText 的实例; - 然后在 Button 的点击事件里调用 EditText 的
getText()
方法获取到输人的内容; - 再调用
toString()
方法转换成字符串; - 最后使用 Toast 将输入的内容显示出来。
运行结果:
ImageView 控件:图片
ImageView 是用于在界面上显示图片的一个控件,使用这个控件需要在 drawable
目录中预置一些图片。
在 xml
文件中添加 ImageView:
<ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content" android:src="@drawable/cmy1" >
</ImageView>
- 由于图片的宽和高都是未知的,所以将 ImageView 的宽和高都设定为
wrap_content
,这样就保证了不管图片的尺寸是多少,图片都可以完整地展示出来。 - android:src :指定引用哪张图片,本例中是
drawable
系目录下的名为cmy1
的图片。
运行结果:
实现点击 Button 切换图片的功能:
public class FirstActivity extends AppCompatActivity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button_normal = (Button)findViewById(R.id.button_normal);imageView = (ImageView)findViewById(R.id.image_view);button_normal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button_normal:imageView.setImageResource(R.drawable.cmy2);break;default:break;}}});}
}
ProgressBar 控件:进度条
用于在界面上显示一个进度条,表示程序正在加载一些数据:
<ProgressBarandroid:id="@+id/progress_circular"android:layout_width="match_parent"android:layout_height="wrap_content" ></ProgressBar>
有个问题,如上实现的进度条会一直旋转:
可以通过可见属性 visibility,来在加载完成时停止进度条旋转:
visible
:表示可见,为默认值。invisible
:表示不可见,但依然存在,只是透明。gone
:表示不可见,并且不再占用屏幕空间。
可以通过 setVisiblity
方法来设定这三种值,举个例子,通过点击 Button 来切换 ProgressBar 为 GONE
还是 VISIBLE
:
public class FirstActivity extends AppCompatActivity {private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button_normal = (Button)findViewById(R.id.button_normal);progressBar = (ProgressBar)findViewById(R.id.progress_circular);button_normal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button_normal:if(progressBar.getVisibility() == View.GONE){ // 原本不可见则设为可见progressBar.setVisibility(View.VISIBLE);}else{ // 原本可见则设为不可见progressBar.setVisibility(View.GONE);}break;default:break;}}});}
}
默认的进度条形式是圆形,可以通过 style
属性将进度条形式设为条形,并且给它设置一个最大值,从而达到动态改变进度条进度的目的:
<ProgressBarandroid:id="@+id/progress_bar"android:layout_width="match_parent"android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"android:max="100"/>
实现 每点击一次按钮就能获取进度条的当前进度,然后在现有进度条上加10作为更新后的进度 的功能:
public class FirstActivity extends AppCompatActivity {private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);Button button_normal = (Button)findViewById(R.id.button_normal);progressBar = (ProgressBar)findViewById(R.id.progress_circular);button_normal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.button_normal:int progress = progressBar.getProgress();progress = progress + 10;progressBar.setProgress(progress);break;default:break;}}});}
}
AlertDialog 控件:提示框
在当前界面弹出一个置顶于有界面元素之上的对话框,能够屏蔽掉其他控件的交互能力。因此一般用于提示一些非常重要的内容或者警告信息。比如防误删等。
添加 AlertDialog:
public void onClick(View v) {AlertDialog.Builder dialog = new AlertDialog.Builder(FirstActivity.this);dialog.setTitle("Warning");dialog.setMessage("Are you sure?");dialog.setCancelable(false);// setCancelable 默认为 true,表点击弹窗外或BACK键可以取消弹窗,false则表示不可以取消dialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 可以自定义点击后的事件,比如跳转到其他 ActivityIntent intent = new Intent(FirstActivity.this, DialogActivity.class);startActivity(intent);}});dialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();
}
setPositiveButton
、setNegativeButton
、setNeutralButton
三者都是封装好的 Button,只是显示位置不同,通常分别用来对应确定事件、否定事件、中立事件。但也可以按行为习惯进行更改,比如我偏要 setPositiveButton
对应否定事件别人也拿我没办法……只是对应事件和方法的意思不一样可能在交接时误导队友……
ProgressDialog 控件:带有进度条的提示框
可以在界面上弹出一个带有进度条的提示框,能够屏蔽掉其他空间的交互能力。一般是用于表示当前操作比较耗时,让用户耐心等待:
public void onClick(View v) {switch (v.getId()){case R.id.button_normal:ProgressDialog dialog = new ProgressDialog(FirstActivity.this);dialog.setTitle("ProgressDialog");dialog.setMessage("Loading……");dialog.setCancelable(false);dialog.setButton3("CANCEL", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { }});dialog.setButton2("YES", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { }});dialog.setButton("NO", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { }});dialog.show();break;}
}
由于 setCancelable()
中传入了 false
,因此 ProgressDialog 不能被取消,所以在加载完成之后一定要用 dismiss()
方法来关闭对话框,否则 ProgressDialog 会一直存在。