目录
- TextView
- Button
- EditText
- ImageView
- ProgressBar
- AlertDialog
- ProgressDialog
Android控件中都有layout_width和layout_height两个属性,分别指定控件的高度和宽度。
这两个属性可选值有match_parent,fill_parent,wrap_content。其中match_parent和fill_parent的意义相同,官方推荐使用match_parent。
match_parent表示让当前控件的大小和父布局一样。
wrap_content表示让当前控件的大小能够刚好包住里面的内容。
当然你也可以对控件的宽和高指定一个固定的值,不过可能在不同手机屏幕的适配方面会出现问题。
一:TextView
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"
android:textColor="#00ff00"
android:text="显示一段文本内容" />
<!--gravity对齐方式-->
二:Button
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="Button"/>
<!--系统会对Button中的所有英文字母自动进行大写转换,可以用textAllCaps禁止这一默认特性-->
两种给按钮添加点击事件
第一种:
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//在这里添加逻辑
}
});
第二种:
package com.example.testone;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
@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:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="编辑框" />
<!--hint指定一段提示性文本-->
缺点:随着文字输入越多,因为高度是wrap_content,因此能包住里面的内容,不过这时候就很难看
解决方法:
增加属性:android:maxLines="1"
这时候指定最大行数是一行,当输入的内容超过时,文本会向上滚动
结合Button运用,通过点击按钮获得EditText输入的内容
package com.example.testone;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
editText = (EditText) findViewById(R.id.editText);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
//在这里添加逻辑
//getText()获得输入的内容,toString()转换成字符串
String nr = editText.getText().toString();
Log.d("MainActivity",nr);
break;
default:
break;
}
}
}
点击按钮后控制台打印信息
四:ImageView
图片一般放这里
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/renwu"/>
可以通过点击按钮代码动态更换图片
package com.example.testone;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
imageView = (ImageView) findViewById(R.id.imageView);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
//在这里添加逻辑
imageView.setImageResource(R.drawable.katon);
break;
default:
break;
}
}
}
五:ProgressBar
<ProgressBar
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
运行后会看到有一个圆形的进度条在旋转
如何让进度条在数据加载完成时消失?
可以通过android:visibility指定,可选值有三种:visible,invisible和gone.
visible表示控件可见,这个是默认值;invisible表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解控件变透明了;
gone表示控件不可见,而且不再占用任何屏幕空间。
我们还可以通过代码设置控件的可见性,使用setVisibility()方法,可以传入View.VISIBLE,View.INVISIBLE和View.GONE三种值
package com.example.testone;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
progressBar = (ProgressBar) findViewById(R.id.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;
}
}
}
通过不停点击按钮,进度条在显示和隐藏来回切换
另外,也可以给进度条指定不同的样式,不如水平进度条
style="?android:attr/progressBarStyleHorizontal"
//给进度条设置一个最大值
android:max="100"
package com.example.testone;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
progressBar = (ProgressBar) findViewById(R.id.bar);
button.setOnClickListener(this);
}
@Override
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
可以在当前的界面弹出一个对话框
package com.example.testone;
import android.content.DialogInterface;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
progressBar = (ProgressBar) findViewById(R.id.bar);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
//在这里添加逻辑
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
//设置标题
dialog.setTitle("这是一个对话框");
//设置内容
dialog.setMessage("你确定要删除这些信息吗?");
//可否用back键关闭对话框
dialog.setCancelable(false);
//调用setPositiveButton方法为对话框设置确定按钮的点击事件
dialog.setPositiveButton("OK",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//调用setNegativeButton方法设置取消按钮的点击事件
dialog.setNegativeButton("Cancel",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//将对话框显示出来
dialog.show();
break;
default:
break;
}
}
}
七:ProgressDialog
和AlertDialog差不多,不过多一个进度条
package com.example.testone;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//View视图,所有空间的基类或者父类
@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:
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("这是是标题");
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(true);
progressDialog.show();
break;
default:
break;
}
}
}
注意:如果你在setCancelable()中传入的是false,表示对话框是不能用back键去掉的,这时候你要在代码做好控制,当数据加载完成后必须调用ProgressDialog的dismiss()方法来关闭对话框,否则对话框一直在。