目录

  • 布局方式
    • 线性布局
    • 相对布局
  • 控件属性
  • 基本控件
    • TextView
      • 设置阴影
      • 跑马灯
      • 中划线
      • 下划线
    • EditText
    • Button
    • RadioButton
    • CheckBox
      • 监听事件
    • ImageView
      • 动态设置图片

布局方式

线性布局

LinearLayout需要指定线性布局的方向,设置orientation属性,vertical为垂直布局,horizontal为水平布局

相对布局

RelativeLayout属性详解

控件属性

layout_width:组件宽度
layout_height:组件高度
id:为TextView设置一个id,用来在代码里面找到这个组件
text:设置要显示的文本
textColor:设置文本的颜色
textStyle:设置字体的风格,内置有三个可选项:normal(无效果),bold(加粗),itallc(斜体)
textSize:字体大小,单位为sp
background:控件的背景,可以是颜色或者是图片
gravity:控件中内容的对齐方式

基本控件

TextView,EditText,Button这些控件的layout_width,layout_height,以及id不用多讲,就是控件的宽高和id。还有常用的可供设置的属性有textSize字体大小,textColor字体颜色,background控件的背景,可以引用drawable资源设置为图片,margin类和padding类分别设置控件的外边距和内边距,layout_gravity设置当前控件的对齐方式,gravity设置控件内部控件的对齐方式。
一般来讲,空间大小和控件间的距离用单位dp,字体大小用单位sp。

TextView

maxLines属性用于设置textView的最大显示行数,当实际行数超过最大行数时,可以用ellipsize属性设置textView长度过长时的缩略显示方式,这是关于ellipsize的属性的博客。

设置阴影

shadowColor:设置阴影的颜色,需要与shadowRadius一起使用
shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0
shadowDx:设置阴影在水平方向上的偏移
shadowDy:设置阴影在竖直方向上的偏移

跑马灯

跑马灯需要在单行显示即maxLines属性为1,并且文字显示不下的前提下,设置ellipsize属性为marquee(eliipsize表示在哪里省略文本),这时在获取到当前控件焦点的情况下,可以横向滚动,接下来设置focusable属性为true表示可以获取焦点,再设置focusableInTouchMode属性为true,表示可以通过触摸获取焦点,这是关于focusable和focusableInTouchMode的区别的博客。最后设置重复滚动次数marqueeRepeatLimit属性为marquee_forever,表示一直滚动。
示例:

<TextViewandroid:id="@+id/tv_7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="string/TextView_Text7string/TextView_Text7string/TextView_Text7"android:textSize="25sp"android:textColor="@color/YellowColor"android:layout_gravity="center"android:layout_marginTop="15dp"android:singleLine="true"android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever"android:focusable="true"android:focusableInTouchMode="true"/><requestFocus/>

中划线

        tv_4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);tv_4.getPaint().setAntiAlias(true);

下划线

下划线和中划线不能同时存在
第一种:

        tv_5 = findViewById(R.id.tv_5);tv_5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);

第二种用xml的方式:

        tv_6 = findViewById(R.id.tv_6);tv_6.setText(Html.fromHtml("<u>TextView_Text6</u>"));

EditText

EditText有一个hint属性,该属性可以设置在EditText没有内容时的提示信息(textColorHint属性设置提示文字的颜色),和TextView一样maxLines属性设置可以显示的最大行数,intputType属性可以设置允许输入的文本类型,如数字number,密码textPassword,当设置为textPassword时,输入内容会用暗文保护。
drawableXxxx在输入框的指定方向添加图片
drawablePadding设置图片与输入框之间的距离
paddingXxxx设置内容与边框的间距
background设置背景色
EditText有用于监视输入改变的监听器
account为一个EditText实例:

account.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {Toast.makeText(EditTextActivity.this,s.toString(),Toast.LENGTH_SHORT).show();}});

获取EditText内容可以使用EditText的getText()方法,例如:editText.getText()

Button

Button的Text属性默认是全大写,要按照设置的内容显示需要设置textAllCaps属性为false
Button的两种点击事件设置方法为:
第一种:
在xml文件中设置onClick属性

<Buttonandroid:id="@+id/bt_1"android:layout_width="150dp"android:layout_height="50dp"android:text="@string/Button1"android:textAllCaps="false"android:textSize="25sp"android:textColor="@color/TextColor_red"android:background="@drawable/bk_filleted_corner"android:layout_centerHorizontal="true"android:onClick="showToast"/>

在Activity中写一个与onClick的属性相同名字的方法

    public void showToast(View view){//点击过后弹出一个提示:Button1被点击了Toast.makeText(this,"Button1被点击了",Toast.LENGTH_SHORT).show();}

第二种:这种也是比较常用的,给Button设置一个点击监听器

bt_2.setOnClickListener(v -> Toast.makeText(ButtonActivity.this,"Button2被点击了",Toast.LENGTH_SHORT).show());

Button的点击事件的返回值为true时,会导致在其后面检测的click事件不执行

RadioButton

单选框,在一个RadioGroup里的RadioButton可以设置一个默认选中的项,设置checked属性为true,
RadioGroup可以设置布局方向orientation为vertical或者horizontal。当然和其他组件一样,可以设置background。

<RadioGroupandroid:id="@+id/radioGroup1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:padding="15dp"><RadioButtonandroid:id="@+id/radioButton1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="男"android:textSize="25sp"android:textColor="@color/TextColor_red"android:checked="true"/><RadioButtonandroid:id="@+id/radioButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="女"android:textSize="25sp"android:textColor="@color/TextColor_red"/></RadioGroup>

为RadioButton设置选项改变的监听事件:

radioGroup.setOnCheckedChangeListener((group, checkedId) -> {RadioButton radioButton = group.findViewById(checkedId);Toast.makeText(RadioButtonActivity.this,radioButton.getText(),Toast.LENGTH_SHORT).show();});

CheckBox

    <CheckBoxandroid:id="@+id/checkbox1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Android"android:textSize="25sp"android:textColor="@color/TextColor_green"android:layout_below="@id/checkbox_textView"android:layout_marginBottom="15dp"/><CheckBoxandroid:id="@+id/checkbox2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="IOS"android:textSize="25sp"android:textColor="@color/TextColor_green"android:layout_below="@id/checkbox1"android:layout_marginBottom="15dp"/><CheckBoxandroid:id="@+id/checkbox3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="其他"android:textSize="25sp"android:textColor="@color/TextColor_green"android:layout_below="@id/checkbox2"android:layout_marginBottom="15dp"/>

监听事件

可以每一个CheckBox设置监听事件

        checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {Toast.makeText(CheckBoxActivity.this,isChecked?"Android被选中了":"Android被取消了选中",Toast.LENGTH_SHORT).show();}});

也可以自己写一个类实现自所需要设置监听的Listener接口,这里需要实现的接口是CompoundButton.OnCheckedChangeListener,代码如下

//为所有CheckBox按钮设置选中改变事件public void setListeners(){OnCheckedChange onCheckedChange = new OnCheckedChange();checkBox1.setOnCheckedChangeListener(onCheckedChange);checkBox2.setOnCheckedChangeListener(onCheckedChange);checkBox3.setOnCheckedChangeListener(onCheckedChange);checkBox4.setOnCheckedChangeListener(onCheckedChange);checkBox5.setOnCheckedChangeListener(onCheckedChange);checkBox6.setOnCheckedChangeListener(onCheckedChange);}class OnCheckedChange implements CompoundButton.OnCheckedChangeListener{@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {switch (buttonView.getId()){case R.id.checkbox1:Toast.makeText(CheckBoxActivity.this,isChecked?"Android被选中了":"Android被取消了选中",Toast.LENGTH_SHORT).show();break;case R.id.checkbox2:Toast.makeText(CheckBoxActivity.this,isChecked?"IOS被选中了":"IOS被取消了选中",Toast.LENGTH_SHORT).show();break;case R.id.checkbox3:Toast.makeText(CheckBoxActivity.this,isChecked?"其他被选中了":"其他被取消了选中",Toast.LENGTH_SHORT).show();break;case R.id.checkbox4:Toast.makeText(CheckBoxActivity.this,isChecked?"打游戏被选中了":"打游戏被取消了选中",Toast.LENGTH_SHORT).show();break;case R.id.checkbox5:Toast.makeText(CheckBoxActivity.this,isChecked?"做饭被选中了":"做饭被取消了选中",Toast.LENGTH_SHORT).show();break;case R.id.checkbox6:Toast.makeText(CheckBoxActivity.this,isChecked?"其他被选中了":"其他被取消了选中",Toast.LENGTH_SHORT).show();break;}}}

然后在onCreate方法里设置监听setListeners()就可以了。

ImageView

ImageView有一个用于设置图片展示方式的属性scaleType,Android ImageView ScaleType:图解
fitStart 保持宽高比缩放图片,直到某一边长充满ImageView,可能留白,将图片置于上面或左边
fitCenter 默认值,将图片置于中间
fitEnd 同上,缩放后将图片置于右边或下边
fitXY 将图片进行缩放使其完全填充ImageVIew,图片可能发生形变
center 不缩放,置于中间,超出边界的不显示
centerCrop 保持长宽比缩放,直到完全填充ImageView,图片超出ImageView部分不显示
centerInside 保持宽高比缩放,直到ImageView能够完全显示图片,如果原图小于ImageView,则直接显示在中间,不缩放
matrix 不缩放,从左上角绘制
adjustviewBounds 设置为true,会自动调整ImageView的大小来适应图片大小
加载网络图片可以使用GitHub上的glide库,加载方法:

Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);

一个使用的例子:

        btn_imv.setOnClickListener(v -> Glide.with(ImageViewActivity.this).load("http://img2.ddove.com/upload/20121009/090649003786.jpg").error(R.drawable.picture2).into(imv_2));

error()方法是在加载失败时加载另一张图片。
这里加载的是网络图片,所以需要在AndroidManifest里面申请网络权限

    <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

动态设置图片

//动态获取图片String imageName = "PictureName";final int resId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());if (resId != 0) {//打印日志Log.e("picture load", "successful");//设置图片资源holder.imageView.setImageResource(resId);}

这里的imageName就是图片的名字

Android基本UI控件(一)相关推荐

  1. android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...

    本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法. 背景技术: 目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一.传 ...

  2. android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  3. android md 控件,Android基本UI控件.md

    # Android基本UI控件 ## *TextView 文本框* ### TextView常用用法 | 主要方法 | 功能描述 | | :----------: | :--------------- ...

  4. android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...

  5. android 触摸监听重写_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  6. android 根据bounds坐标进行点击操作_炫酷的Android时钟UI控件,隔壁产品都馋哭了...

    废话不多说,先上效果效果酷炫,动画丰富,效果爆炸boom-设计思路看腻了市面上各种丑陋难看的时钟控件,是时候整点新活!将现实生活中的摆钟圆形表盘设计.电子手表的数显表盘设计抽象出来,提取出" ...

  7. Android获取UI控件的宽高

    一.概述 我们如果开发一些依赖于UI控件宽高的功能,那么自然会想到调用View的getHeigth()和getWidth()方法,对于新手来说,这里有一个坑,你在Activity中的onCreate( ...

  8. android基础ui控件,Android基础——基础UI控件

    日历,时钟,计时器 package com.example.mybaseuii; import androidx.appcompat.app.AppCompatActivity; import and ...

  9. Android 优秀UI控件 ---- FlowingDrawer

    1,前天在git上看到了一个不错的控件 ,最近两天项目也没有那么赶了,就抽时间来写写代码,锻炼一下手感,先看一下效果吧. 2 整体来看 ,主要是有两块来实现的,①主界面的RecyclerView ,② ...

  10. Android之UI控件

    本文主要包括以下内容 Spinner的使用 Gallery的使用 Spinner的使用 Spinner的实现过程是 1. 在xml文件中定义Spinner的控件 2. 在activity中获取Spin ...

最新文章

  1. quartus管脚分配后需要保存吗_掉电保存数据到EEPROM
  2. linux 中的 nohup 命令(设置后台进程): nohup: ignoring input and appending output to ‘nohup.out’
  3. day27 CRM delete action 嵌入CRM
  4. org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result
  5. 现在离开哈尔滨需要做核酸检测吗?
  6. 2019杭电多校第九场 Rikka with Cake (hdu6681)
  7. Ubuntu 14.04 下每次重启系统都默认最大亮度的解决办法
  8. sencha touch 2.0 学习记录
  9. word设置多级标题样式及编号
  10. 如何学计算机课程,零基础应该如何学习电脑知识
  11. JavaScript 对象的创建与继承——创建篇
  12. [BIM]BIM中IFD介绍
  13. 一个自动生成评论的小工具
  14. 京东首页静态页面html+css
  15. babel7 + corejs3升级
  16. 已知IP地址和子网掩码后可以算出网络地址、广播地址、地址范围、主机位数、可用主机位数
  17. mysql 正则 查询 手机号,移动手机号码段 正则
  18. jcfis.SMBException(incorrect function,0xC000009A等)解决办法
  19. Vue ,Element-ui中el-menu使用阿里图标
  20. WSF操作系统抽象层学习笔记(二)---列队(单向链表)

热门文章

  1. 敏捷开发 建立愿景、使命_使用愿景板创建敏捷产品策略的10条技巧
  2. 使用tesseract-ocr进行文字识别
  3. pdf拆分成多个文件,方法步骤
  4. sketch怎么把psd导出为HTML,如何巧妙将sketch文档完美转换成PSD
  5. 大地测量球面坐标BLH三个字母的由来含义
  6. 数据库备份的方式有哪些
  7. BAT大牛亲授基于ElasticSearch的搜房网实战(第三章环境搭建)
  8. java下载文件下载不动_JAVA实现文件下载,浏览器端得到数据没反应
  9. LinuxDNS域名解析
  10. 剖析虚幻渲染体系(15)- XR专题