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 button = (Button) findViewById(R.id.button_1); button.setOnClickListener(new View.OnClickListener() { // 匿名类 new View.onClickListener() @Override public void onClick(View v) { //添加逻辑 } });
如果不想用匿名类来注册,也可以用实现接口的方式来注册:
// implements 继承 View.onClickListener 接口 public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { //... Button button = (Button) findViewById(R.id.button_1); button.setOnClickListener(this); // this 即 implements View.onClickListener 的具体实现 } @Override public void onClick(View v){ switch (v.getId()){ case R.id.button_1: //添加逻辑 break; default: break; } } }
EditText 控件:输入框
EditText 允许用户在控件里输入和编辑内容,并且可以在程序中对这些内容进行处理:
运行结果:
android:hint :在文本框中出现的提示文字。一旦用户输入,提示就会消失。android:maxLines :限制文本框的最大行数。当输入内容增多时,EditText 会不断拉长,界面就会非常难看。本例中,输入超过两行,文本就会向上滚动,EditText 就不会再继续拉伸。
还可以结合 EditText 和 Button 来完成一些功能,比如点击按钮来获取 EditText 中输入的内容:
public class MainActivity extends AppCompatActivity { private Button button; private EditText editText; @Override protected 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() { @Override public 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:
由于图片的宽和高都是未知的,所以将 ImageView 的宽和高都设定为 wrap_content,这样就保证了不管图片的尺寸是多少,图片都可以完整地展示出来。android:src :指定引用哪张图片,本例中是 drawable 系目录下的名为 cmy1 的图片。
运行结果:
实现点击 Button 切换图片的功能:
public class FirstActivity extends AppCompatActivity { private ImageView imageView; @Override protected 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() { @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_normal: imageView.setImageResource(R.drawable.cmy2); break; default: break; } } }); } }
ProgressBar 控件:进度条
用于在界面上显示一个进度条,表示程序正在加载一些数据:
有个问题,如上实现的进度条会一直旋转:
可以通过可见属性 visibility,来在加载完成时停止进度条旋转:
visible :表示可见,为默认值。invisible :表示不可见,但依然存在,只是透明。gone :表示不可见,并且不再占用屏幕空间。
可以通过 setVisiblity 方法来设定这三种值,举个例子,通过点击 Button 来切换 ProgressBar 为 GONE 还是 VISIBLE:
public class FirstActivity extends AppCompatActivity { private ProgressBar progressBar; @Override protected 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() { @Override public 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 属性将进度条形式设为条形,并且给它设置一个最大值,从而达到动态改变进度条进度的目的:
实现 每点击一次按钮就能获取进度条的当前进度,然后在现有进度条上加10作为更新后的进度 的功能:
public class FirstActivity extends AppCompatActivity { private ProgressBar progressBar; @Override protected 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() { @Override public 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 控件:提示框
在当前界面d出一个置顶于有界面元素之上的对话框,能够屏蔽掉其他控件的交互能力。因此一般用于提示一些非常重要的内容或者警告信息。比如防误删等。
添加 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,表点击d窗外或BACK键可以取消d窗,false则表示不可以取消 dialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 可以自定义点击后的事件,比如跳转到其他 Activity Intent intent = new Intent(FirstActivity.this, DialogActivity.class); startActivity(intent); } }); dialog.setNegativeButton("NO", 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(); }
setPositiveButton、setNegativeButton、setNeutralButton 三者都是封装好的 Button,只是显示位置不同,通常分别用来对应确定事件、否定事件、中立事件。但也可以按行为习惯进行更改,比如我偏要 setPositiveButton 对应否定事件别人也拿我没办法……只是对应事件和方法的意思不一样可能在交接时误导队友……
ProgressDialog 控件:带有进度条的提示框
可以在界面上d出一个带有进度条的提示框,能够屏蔽掉其他空间的交互能力。一般是用于表示当前 *** 作比较耗时,让用户耐心等待:
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() { @Override public void onClick(DialogInterface dialog, int which) { } }); dialog.setButton2("YES", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); dialog.setButton("NO", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); dialog.show(); break; } }
由于 setCancelable() 中传入了 false,因此 ProgressDialog 不能被取消,所以在加载完成之后一定要用 dismiss() 方法来关闭对话框,否则 ProgressDialog 会一直存在。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)