Android入门(七) | 常用控件

Android入门(七) | 常用控件,第1张

Android入门(七) | 常用控件

文章目录

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 会一直存在。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5719742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存