《第一行代码》学习笔记:常用控件的使用方法

一、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,再指定控件的宽度和高度,然后再适当加入一些控件特有的属性就差不多了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值