Android入门(七) | 常用控件

文章目录

  • TextView 控件:文本信息
  • Button 控件:按钮
  • EditText 控件:输入框
  • ImageView 控件:图片
  • ProgressBar 控件:进度条
  • AlertDialog 控件:提示框
  • ProgressDialog 控件:带有进度条的提示框


TextView 控件:文本信息

TextView 是 Android 中较常用的一个控件。主要用于在界面上显示一段文本信息,配置在每个活动的 xml 文件中。除了之前用到的 android:idandroid:layout_widthandroid:layout_height 三种属性,下面三种属性也比较常用:

  • android:gravity :文字对齐方式,可选值有 topbottomleftrightcenter 等,可以用 | 来同时指定多个值。
  • 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 就不会再继续拉伸。

还可以结合 EditTextButton 来完成一些功能,比如点击按钮来获取 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 的点击事件里调用 EditTextgetText() 方法获取到输人的内容;
  • 再调用 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 来切换 ProgressBarGONE 还是 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();
}

setPositiveButtonsetNegativeButtonsetNeutralButton 三者都是封装好的 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 会一直存在。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android入门(八) | 常用的界面布局 及 自定义控件

文章目录LinearLayout &#xff1a;线性布局android:layout_gravity &#xff1a;控件的对齐方式android:layout_weight&#xff1a;权重RelativeLayout &#xff1a;相对布局相对于父布局进行定位相对于控件进行定位边缘对齐FrameLayout &#xff1a;帧布局Percent &#xff1…

Android入门(九)| 滚动控件 ListView 与 RecyclerView

文章目录ListView内置类型的简单运用定制数据类型提升效率点击事件RecyclerView布局管理器点击事件ListView 内置类型的简单运用 由于手机屏幕空间有限&#xff0c;能够一次性在屏幕上显示的内容不多&#xff0c;当我们的程序有大量数据需要显示的时候就可以借助 ListView 来…

Android入门(10)| Fragment碎片详解

文章目录为什么要使用碎片&#xff08;Fragment&#xff09;实例布局文件FragmentActivity动态添加碎片布局文件FragmentActivity碎片通信Fragment布局文件Activity生命周期为什么要使用碎片&#xff08;Fragment&#xff09; 我们在手机上看新闻可能是这样的&#xff1a; Re…

Android开发(1) | Fragment 的应用——新闻应用

文章目录Item&#xff1a;标题子项布局文件Java代码标题碎片布局文件Java代码新闻内容碎片布局文件Java代码新闻内容活动布局文件Java代码首界面布局文件Java代码Item&#xff1a;标题子项 布局文件 news_item.xml&#xff1a; <TextViewxmlns:android"http://schema…

Android入门(11)| 全局广播与本地广播

文章目录广播概念接收广播动态注册实例静态注册实例发送广播发送标准广播广播的跨进程特性发送有序广播本地广播广播概念 Android 中的每个应用程序都可以对自己感兴趣的广播进行注册&#xff0c;这样该程序就只会接收到自己所关心的广播内容&#xff0c;这些广播可能是来自系…

Android开发(2) | 广播 Broadcast 的应用——强制下线功能

文章目录功能简介关闭所有活动登陆界面发送强制下线的广播广播接收器AndroidManifest.xml运行结果功能简介 强制下线功能只需要弹出一个对话框&#xff0c;让用户只能点击确定按钮&#xff0c;回到登录界面。 如果在每一个活动中添加一个对话框的话太过繁琐&#xff0c;用广播…

Android入门(12)| 数据持久化

文章目录数据持久化文件存储将数据存储进文件实例从文件中读取数据实例SharedPreferences存储将数据存储进文件实例从文件中读取数据实例实现记住密码的功能SQLite数据库存储创建自己的帮助类调用自己的帮助类补全 onUpgrade() 方法增删查改增&#xff1a;SQLiteDatabase.inser…

Android入门(13)| Android权限 与 内容提供器

文章目录普通权限与危险权限运行时申请权限内容提供器运用安卓封装好的内容提供器自实现的内容提供器概念实现普通权限与危险权限 主要用于不同应用程序之间在保证被访数据的安全性的基础上&#xff0c;实现数据共享的功能。 在 Android 6.0 开始引入了运行时权限的功能&…

Android入门(14)| 通知

文章目录创建通知点击效果其它小功能实例创建通知 创建通知的步骤&#xff1a; 管理通知的 NotificationManager&#xff0c;通常通过当前 Context 的 getSystemService() 获取实例。它接受一个字符串参数用于确定获取系统的什么服务。Android 8.0(O) 版本后需要通知通道&…

Android开发(3) | 权限和内容提供器的应用——调用相机和相册

文章目录拍照并保存到 ImageView 控件布局文件 notice_layout.xml按钮 button_takePhoto 的点击操作隐式 Intent 启动后的回调AndroidManifest.xml从相册选取照片并在 ImageView 控件中显示布局文件 notice_layout.xml按钮 button_takePhoto 的点击操作自定义打开相册的方法 op…

Android开发(4) | 系统权限、MediaPlayer类 和 VideoView类 的应用——播放多媒体文件

文章目录MediaPlayer类播放音频的实例VideoView类播放视频的实例MediaPlayer类 对多种格式的音频文件提供了全面的控制方法&#xff1a; 如何获得MediaPlayer实例&#xff1f; 通过构造函数&#xff1a; MediaPlayer mp new MediaPlayer();调用 MediaPlayer.create() 方法&…

Android入门(15)| 网络

文章目录WebViewHTTP使用HttpURLConnection使用OkHttp封装网络操作封装HttpURLConnection封装OkHttpWebView WebView 可以在 应用程序中&#xff08;而不是浏览器&#xff09; 展示一些网页。 布局文件 web_layout.xml&#xff1a; <LinearLayoutxmlns:android"http…

Android入门(16)| 服务

文章目录概念Android 多线程继承 Thread继承 Runable 接口匿名类异步消息处理AsyncTask使用服务框架启动/停止服务绑定/解绑服务服务的生命周期前台服务IntentService完整版下载示例下载过程的回调接口&#xff1a;DownloadListener继承 AsyncTask 实现下载功能&#xff1a;Dow…

2020德勤面试开始了吗_2020国考面试开始,近期面试公告汇总,附结构化小组面试流程...

2020年国家公务员考试面试环节逐步恢复考试&#xff0c;各个招录部门已经发布面试考察公告&#xff0c;对于进入面试环节的国考考生来说&#xff0c;有必要了解近期国考面试的招录动态&#xff0c;提前做好面试准备。2020国考国家统计局机关面试面试确认&#xff1a;请进入面试…

项目积压需求项目计划_需求变更频繁,项目经理如何做好需求管理?

项目实施过程中&#xff0c;项目经理常常面临一个重大挑战——需求变更。需求变更无处不在&#xff0c;市场条件变化、新业务出现、战略目标调整、客户需求修改、资源限制等&#xff0c;都会造成需求变更。需求变更会影响项目的时间、成本和质量&#xff0c;对整个项目和团队成…

Android | Sensor.TYPE_ORIENTATION被废弃后的解决办法

文章目录概述getOrientation 方法根据 旋转矩阵R 获取 设备旋转弧度getRotationMatrix 方法根据 地磁场、加速度传感器对象 获取 旋转矩阵R代码参考资料概述 Sensor.TYPE_ORIENTATION 常数在 API 8 中已弃用&#xff0c;官方推荐使用 SensorManager.getOrientation() 替代。关…

【JAVA 开发小问题】 | String操作合集

文章目录截取特定两个字符之间的字符串截取特定两个字符之间的字符串 利用正则表达式&#xff0c;图片来源

uniapp 刷新后数据都没有了_环境温度传感器都没有连接,竟然还会有数据?

福田欧曼GTL(福康发动机、康明斯2880系统)匹配ECoffit尿素泵●故障现象&#xff1a;OBD故障灯点亮&#xff0c;不烧尿素&#xff0c;油耗高&#xff0c;动力不足●故障码&#xff1a;●维修分析&#xff1a;①故障指出加热器问题&#xff0c;摸下尿素箱温度&#xff0c;发现烫手…

保姆级教学!Xcode 配置 OpenGL 环境

文章目录GLFW获取 GLFWGLAD获取 GLAD在 Xcode 中配置下载好的 GLFW 和 GLAD配置流程检测是否配置成功无关配置的题外话——Xcode 下安全的删除移动操作GLFW Graphics Library Framework&#xff08;图形库框架&#xff09;&#xff0c;可以让我们通过其封装好的 通用API 来正确…

Android入门(17)| 百度提供的 Android定位SDK

文章目录配置百度提供的 Android定位SDK用于发布的 SHA1用于测试的 SHA1使用百度定位实例配置百度提供的 Android定位SDK 详情参见官方文档&#xff0c;这里仅对获取 SHA1 做详细介绍&#xff1a; 用于发布的 SHA1 用于测试的 SHA1 使用百度定位实例 public class LocationAc…