Android 基础入门干货分享 (UI控件篇)

向量数据库大模型NoSQL数据库

picture.image

戳蓝字“前端自学社区”关注我们哦,后续更新更多干货

picture.image

· 前· 言 ·

picture.image

“最近报名了一个Android比赛,所以这几天一直备战学习Android方面知识,虽然之前学过,但已经很久没写Android了,忘的差不多了,哈哈。于是这几天刷Android视频学习,总结了学习中遇到之前没学过的知识点,还有一些常用的属性。以后开发Android的话,可以直接拎起来干。我一直对移动端有特别的爱好,想开发一款的APP,但又不想用Andorid写,写UI太繁琐,由于之前常写前端,已经习惯了前端的开发方式。后续有空会用Flutter来搞搞,目前现在能应付比赛就行了”

关于Android UI 设计

常用布局

线性布局

picture.image

picture.image

  
id="@+id/edtInput",ID 是连接UI 与代码的桥梁  
layout_width="fill_parent" ,自动填充至屏幕宽度  
layout_width="wrap_content" ,自动填充为控件大小  
  
在LinearLayout 里面的控件,按照水平或者垂直排列:  
orientation="horizontal" :水平排列;  
orientation=" vertical" :垂直排列  
  
   
  
使用android:layout_weight指定百分比(权值、权重)。  
在LinearLayout嵌套的情况下,子LinearLayout必须要设置权值,否则默认的情况是未设置权值的子LinearLayout占据整个屏幕。  
  
   
  
android:id —— 为控件指定相应的ID  
android:text —— 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串  
android:grivity —— 指定内部控件的基本位置,比如说居中,居右等位置  
android:textSize —— 指定控件当中字体的大小  
android:background —— 指定该控件所使用的背景色,RGB命名法  
android:width —— 指定控件的宽度  
android:height —— 指定控件的高度  
android:padding* —— 指定控件的内边距,也就是说控件当中的内容  
android:sigleLine —— 如果设置为真的话,则将控件的内容在同一行当中进行显示  
android:layout_weight —— 按比例 平分内部空间的大小,把剩余宽度平分

相对布局

picture.image

picture.image

关于Android UI 控件

TextView

  
TextView常用属性  
  
android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)  
  
android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。  
  
android:cursorVisible设定光标为显示/隐藏,默认显示。  
  
android:drawableTop在text的正上方输出一个drawable。  
  
android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:”start”—?省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间; ”marquee” ——以跑马灯的方式显示(动画横向移动)  
  
android:maxLines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。  
  
android:lineSpacingMultiplier设置行间距的倍数。如”1.2android:phoneNumber设置为电话号码的输入方式。  
  
android:textColorHighlight被选中文字的底色,默认为蓝色  
  
android:textColorHint设置提示信息文字的颜色,默认为灰色。与hint一起使用。  
  
android:textStyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开  
  
android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)  
  
  android:maxHeight设置文本区域的最大高度  
  
  android:minHeight设置文本区域的最小高度  
  
  android:width设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width的区别看这里。  
  
  android:maxWidth设置文本区域的最大宽度  
  
  android:minWidth设置文本区域的最小宽度

Button

  
android:drawable //放一个drawable资源  
android:drawableTop //可拉伸要绘制的文本的上面  
android:drawableBottom //可拉伸要绘制的文本的下面  
android:drawableLeft //可拉伸要绘制的文本的左侧  
android:drawableRight //可拉伸要绘制的文本的右侧  
android:text //设置显示的文本  
android:textColor //设置显示文本的颜色  
android:textSize //设置显示文本字体大小  
android:background //可拉伸使用的背景  
android:onClick //设置点击事件

EditText 类似于 HTML 中的表单Input

picture.image

EditText 监听输入内容

  
EditText etOne= (EditText) findViewById(R.id.et_phone);  
etOne.addTextChangedListener(new TextWatcher() {  
 @Override  
 public void beforeTextChanged(CharSequence s, int start, int count, int after) {  
 Log.i("Ansen","内容改变之前调用:"+s.toString());  
 }  
   
 @Override  
 public void onTextChanged(CharSequence s, int start, int before, int count) {  
 Log.i("Ansen","内容改变,可以去告诉服务器:"+s.toString());  
 }  
   
 @Override  
 public void afterTextChanged(Editable s) {  
 Log.i("Ansen","内容改变之后调用:"+s.toString());  
 }  
 });

RadioButton 单选框

XML RadioButton 是被包裹在RadioGroup中的

  
 <RadioGroup  
 android:id="@+id/r1"  
 android:layout_width="match_parent"  
 android:layout_height="match_parent"  
 >  
 <RadioButton  
 android:id="@+id/man"  
 android:layout_width="wrap_content"  
 android:layout_height="wrap_content"  
 android:text="男"  
 android:checked="true"  
 />  
 <RadioButton  
 android:id="@+id/girl"  
 android:layout_width="wrap_content"  
 android:layout_height="wrap_content"  
 android:text="女"  
 />  
 </RadioGroup>

自定义RadioButton图标

  
总结一下设置图标的三种方式:  
  
(1button属性:主要用于图标大小要求不高,间隔要求也不高的场合。  
  
(2background属性:主要用于能够以较大空间显示图标的场合。  
  
(3)drawableLeft属性:主要用于对图标与文字之间的间隔有要求的场合。  
  
注意使用 background 或者 drawableLeft时 要设置 android:button="@null"

监听选中RadioButton的内容

  
RadioGroup申明的控件.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {  
 @Override  
 public void onCheckedChanged(RadioGroup group, int checkedId) {  
 #找到选中的RadioButton 中id  
 RadioButton radioButton = (RadioButton) group.findViewById(checkedId);  
 # radioButton.getText() 为选中的内容  
 Toast.makeText(RadioActivity.this,radioButton.getText(),Toast.LENGTH_LONG).show();  
 }  
 });

CheckBox 复选框

常用属性

  
常用属性  
  
 android:id="@+id/checkbox"  
 android:layout_width="wrap_content"  
 android:layout_height="wrap_content"  
 android:checked="false"        checked如果为true,就会选中该复选框  
 android:text="男"

自定义复选框图标

  
改变默认样式  
 android:button="@drawable/check"   
     通过改变button的属性来改变默认样式,指定 drawable/自定义的样式

自定义样式

picture.image

自定义CheckBox图标显示

picture.image

如何判断CheckBox被选中

  
# onCheckedChanged事件,通过isChecked 来判别是否被选中  
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
 if (isChecked) {   
 cb.setText("This checkbox is: checked");   
 }   
 else {   
 cb.setText("This checkbox is: unchecked");   
 }   
 }

ImageView 相当于HTML中的image

常用属性

  
常用属性,并且这些属性都有与之对应的getter、setter方法:  
  
android:adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片的长宽比。  
android:maxHeight:设置ImageView的最大高度。  
android:maxWidth:设置ImageView的最大宽度。  
android:scaleType:设置所显示的图片如何缩放或移动以适应ImageView的大小。  
android:src:设置ImageView所显示的Drawable对象的ID。  
  对于android:scaleType属性,因为关于图像在ImageView中的显示效果,所以有如下属性值可以选择:  
  
matrix:使用matrix方式进行缩放。  
fitXY:横向、纵向独立缩放,以适应该ImageView。  
fitStart:保持纵横比缩放图片,并且将图片放在ImageView的左上角。  
fitCenter:保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。  
fitEnd:保持纵横比缩放图片,缩放完成后将图片放在ImageView的右下角。  
center:把图片放在ImageView的中央,但是不进行任何缩放。  
centerCrop:保持纵横比缩放图片,以使图片能完全覆盖ImageView。  
centerInside:保持纵横比缩放图片,以使得ImageView能完全显示该图片。

Android如何加载网络图片

  
#如何在加载网络图片?  
1. 加入网络请求在 manifests  
 <use-permission android:name="android.permission.INTERNET"/>  
2.使用第三方库加载网络图片 ---- 我使用的glide  
 放置到 build.gradle中, 自动构建环境  
3.直接使用第三方提供的api,导入对应库

使用 glide api 简单直接粗暴

  
 Glide.with(mContext).load("https://ss1.bdstatic.com/70cFvXSh\_Q1YnxGkpoWK1HF6hhy/it/u=3728935550,1593997461&fm=26&gp=0.jpg").into(holder.img);

效果如下

picture.image

GrideView 使用 和ListView 类似 网格视图

如何使用GrideView

  
#如何使用 GrideView   
它的使用和 ListView 相似。  
  
1. 先建立XML GrideView / ListView  
 eg:  
 <GridView  
 android:id="@+id/grade_1"  
 android:layout_width="match_parent"  
 android:layout_height="match_parent"  
 android:horizontalSpacing="2dp"  
 android:numColumns="3"  
 />  
  
2.然后再建立你想在ListView 或者是 GrideView 放的控件,独立的 xml 文件  
 eg:  
 <ImageView  
 android:id="@+id/imgs"  
 android:layout_width="150dp"  
 android:layout_height="150dp"  
 android:scaleType="fitXY"  
 />  
 <TextView  
 android:id="@+id/name"  
 android:layout_width="150dp"  
 android:layout_height="wrap_content"  
 android:text="测试"  
 android:gravity="center"  
 />  
  
3. 建立一个包,这个包里放置 一个 自己 封装的Adapter 和 一个 GrideActivity   
  
   
 自己封装 Adapter  
 1. 继承 BaseAdapter  
 2. 实例化 LayoutInflater 对象,以便动态载入 xml布局  
 3. 获得 LayoutInflater 实例  
 4. 创建 Holder 来加载缓存视图  
 5. 实例化 LayoutInflater 对象·inflater 是用来找 res/layout 下的 xml 布局文件,并且实例化;  
 6. 创建 holde对象,来找到视图中的id  
 7. convertView.setTag(holder);  
 8. 最后给控件赋值  
   
   
 public class MyGridViewAdapter extends BaseAdapter {  
 Context mContext;  
 // 实例化 LayoutInflater 对象,以便动态载入 xml布局  
 private LayoutInflater mInflater;  
 public MyGridViewAdapter(Context context){  
 this.mContext = context;  
 // 获得 LayoutInflater 实例  
 mInflater = LayoutInflater.from(context);  
 }  
  
 @Override  
 public int getCount() {  
 return 10;  
 }  
  
 @Override  
 public Object getItem(int position) {  
 return null;  
 }  
  
 @Override  
 public long getItemId(int position) {  
 return 0;  
 }  
  
 @Override  
 public View getView(int position, View convertView, ViewGroup parent) {  
 Holder holder = null;  
 if (convertView == null) {  
 convertView = mInflater.inflate(R.layout.activity_grideview_item,null);  
 holder = new Holder();  
 holder.img = (ImageView) convertView.findViewById(R.id.imgs);  
 holder.text = (TextView) convertView.findViewById(R.id.name);  
 convertView.setTag(holder);  
 } else {  
 holder = (Holder) convertView.getTag();  
 }  
 holder.text.setText("小红");  
 Glide.with(mContext).load("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3728935550,1593997461&fm=26&gp=0.jpg").into(holder.img);  
 return convertView;  
 }  
 static class Holder {  
 public ImageView img;  
 public TextView text;  
 }  
 }  
   
  
 GrideActivity 中的代码  
 1. 申明控件  
 2. 设置适配器 setAdapter(new MyGridViewAdapter(GradeActivity.this))  
 3. 可以通过setOnItemClickListener(new AdapterView.OnItemClickListener()) 监听点击的哪一项  
   
   
 public class GradeActivity extends AppCompatActivity {  
 private GridView mGrid;  
 @Override  
 protected void onCreate(Bundle savedInstanceState) {  
 super.onCreate(savedInstanceState);  
 setContentView(R.layout.activity_grade);  
 mGrid = (GridView) findViewById(R.id.grade_1);  
 mGrid.setAdapter(new MyGridViewAdapter(GradeActivity.this));  
 mGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
 @Override  
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
 Toast.makeText(GradeActivity.this,"你单击的是"+position,Toast.LENGTH_LONG).show();  
 }  
 });  
 }  
 }  

WebView 用来加载网页

picture.image

picture.image

picture.image

picture.image

加载静态资源Web

picture.image

picture.image

效果如下

Web管理端****

picture.image

结束语

这就是最近学习的干货。学习Android的伙伴朋友们,这份是你学习Android控件的宝典干货,可以快速整体的对Android 控件有个认知。学完上面的内容你就可模仿例如做个QQ 或者 微信端的 纯静态 没数据的APP,是不是很酷。如果做出第一APP时,你会很激动,才有继续学下去的动力。  

picture.image

觉得文章不错的,可以分享转发朋友圈哦!

picture.image

推荐历史文章

技术方向选型

十月份复盘总结

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动客户端性能优化最佳实践
在用户日益增长、需求不断迭代的背景下,如何保证 APP 发布的稳定性和用户良好的使用体验?本次分享将结合字节跳动内部应用的实践案例,介绍应用性能优化的更多方向,以及 APM 团队对应用性能监控建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论