一、常用控件

1.TextView(文本)

  • match_parent:控件与父类相同(基本不用fil_parent)wrap_content:刚好包裹里面内容。
  • android:gravity调节文字对齐方式,可选参数包括top、bottom、left、right、center等。可用|来同时指定多个值。文字采用sp为单位,文字颜色使用#XXXXXX来表示。
  • android:textSize 属性可以指定文字的大小,通过 android:textColor 属性可以指定文字的颜色。

2.Button(按钮)

Button可以通过注册监听器调用,也可以通过实现接口的方式实现调用。

  • button.setOnClickListener(new OnClickListener(){})
  • 或者让活动类实现 OnClickListener 接口,重写onclick方法 onClick(View v),可以通过参数v的id判断是哪一个按钮。

3.EditText(编辑框)

  • android.hint:指定一段提示性文字
  • android:maxLines指定EditText的最大行数
  • editText_01.getText().toString()来获取输入内容。

4.ImageView(图片控件)

  • android:src为ImageView指定一张照片。
  • setImageResource()动态设置ImageView里面的图片。

5.ProgressBar(进度条)

  • Android:visibility设置控件可见属性,visible可见invisible不可见,gone消失。设置控件可见性setVisiblity(View.visible);获取控件可见性progress_bar01.getVisiblity()
  • 设置Prograssbar的进度条进度。 progressBar.getProgress()获得进度,progressBar.setProgress(progress)设置进度。

6.AlterDialog(对话框)

  • 一般 AlertDialog 都是用于提示一些非常重要的内容或者警告信息。
  • 先new一个AlterDialog.Builder对象,setTitle、setMessage、SetCancelable、setPositiveButton、setNegativeButton完成。
  • 最后一定要dialog.show();

7.ProgressDialog

  • ProgressDialog 会在对话框中显示一个进度条,一般是用于表示当前操作比较耗时,让用户耐心地等待。
  • 与AlterDialog类似,设置progressdialog.setCaceled(true),可通过返回键back回去,否则回不去.

二、四种基本的布局

1.线性布局(Linearlayout)

  • android:orientation="vertical"竖直方向。horizontal水平方向。
  • android:gravity 用于指定文字在控件中的对齐方式,而android:layout_gravity用于指定控件在布局中的对齐方式。
  • .dp是Android中用于指定控件大小、间距等属性 , android:layout_width=“0dp” android:layout_weight="1"若两个控件都为1则平分屏幕。

2.相对布局 (RelativeLayout)

  • 相对父布局定位:
//控件位于父控件的右下方
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"

//两个属性来确定置。

  • 相对于控件定位
//控件位于button_03控件的右下方
android:layout_below="@id/button_03"
android:layout_toRightOf="@id/button_03"

3.帧布局 (FrameLayout)

应用场景较少,将元素放在左上方

4.百分比布局(PercentFrameLayout)

三、自定义控件

控件的继承结构

需求,添加一个类似苹果的菜单栏,左边是返回按钮,中间是内容,右边是编辑

  1. 自定义布局

在res/layout 新建一个布局文件 title.xml,
然后在需要引入这个布局的xml文件中加上<include layout="@layout/title"/> 就可以了。

  1. 自定义控件

每次引入Title.xml 点击事件都要写,不如改成动态加载形成自定义控件。

  • 上一步引入布局后;
  • 新建TitleLayout继承自LinearLayout,对标题栏动态加载
public class TitleLayout extends LinearLayout {public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs);     LayoutInflater.from(context).inflate(R.layout.title, this);}
}
  • 3.重新引入布局,引入TitleLayout,而非title.xml;
<com.example.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content">
</com.example.uicustomviews.TitleLayout>
  • 4.在布局的构造函数中中添加点击事件,形成自定义控件。
public class TitleLayout extends LinearLayout {public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this);Button titleBack = (Button) findViewById(R.id.title_back); Button titleEdit = (Button) findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { ((Activity) getContext()).finish();}});titleEdiOnCt.setlickListener(new OnClickListener();}
}

四、ListView

简单用法

  • 在一个布局中中加入ListView
<ListView
android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" >
</ListView>
  • 提供显示数据
private String[] data = { "Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango" };
  • 构建适配器,目的是传递数据进入ListView,适配器是ArrayAdapter,可以通过泛型传递数据。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this, android.R.layout.simple_list_item_1, data);

这里我们使用了android.R.layout.simple_list_item_1 作为 ListView 子项布局的 id,这是一个 Android 内置的布局文件,里面只有一个TextView,可用于简单地显示一段文本。

3.setAdapter将适配器传递进去,完成Listview与数据的关联。

listView.setAdapter(adapter);

高级用法(定制ListView的界面)

  1. 定义实体类Fruit,传入ImageId和name;
public class Fruit { private String name; private int imageId;}

2.建立Fruit_item.xml,完善布局;

定义了一个 ImageView 用于显示水果的图片, 又定义了一个TextView 用于显示水果的名称

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" ><ImageView android:id="@+id/fruit_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /><TextView android:id="@+id/fruit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dip" />
</LinearLayout>

3.建立自定义适配器,继承ArrayAdapter,泛型为Fruit类,FruitAdapter将上下文、ListView子布局的id和数据传递进来。

public class FruitAdapter extends ArrayAdapter<Fruit> { private int resourceId;public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects) {super(context, textViewResourceId, objects);resourceId = textViewResourceId;}
}

4.重写getView方法,其功能是每个子项滚动到屏幕内的时候会被调用。

  • 获取当前项的Fruit实例;L
  • ayoutInflater.from(getContext()).inflate为这个子项加载传入的布局;
  • setImageResource和setText设置图片和文字。返回布局最后。
public View getView(int position, View convertView, ViewGroup parent) { Fruit fruit = getItem(position); // 获取当前项的Fruit实例View view = LayoutInflater.from(getContext()).inflate(resourceId, null); ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image); TextView fruitName = (TextView) view.findViewById(R.id.fruit_name); fruitImage.setImageResource(fruit.getImageId()); fruitName.setText(fruit.getName());return view;
}

5.使用initFruits初始化所有水果数据,将水果名称和水果图片ID添加进来;建立Adapter,将其作为适配器传入Listview,只要修改fruit_intem.xml,就可以修改出复杂界面了。

FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);private void initFruits() {//初始化所有水果的数据;
}
  1. 给每个viewItem添加一个点击事件
listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Fruit fruit = fruitList.get(position); Toast.makeText(MainActivity.this, fruit.getName(),
Toast.LENGTH_SHORT).show();}
}
  1. ListView的优化

getView()方法中还有一个 convertView 参数,这个可以理解成上次加载成功的view。

public class FruitAdapter extends ArrayAdapter<Fruit> {@Overridepublic View getView(int position, View convertView, ViewGroup parent) { Fruit fruit = getItem(position);View view;ViewHolder viewHolder;if (convertView == null) {view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder();viewHolder.fruitImage = (ImageView) view.findViewById (R.id.fruit_image);viewHolder.fruitName = (TextView) view.findViewById (R.id.fruit_name);view.setTag(viewHolder); // 将ViewHolder存储在View中} else {view = convertView;viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder}viewHolder.fruitImage.setImageResource(fruit.getImageId()); viewHolder.fruitName.setText(fruit.getName());return view;}class ViewHolder { ImageView fruitImage; TextView fruitName;}
}

我们新增了一个内部类 ViewHolder,用于对控件的实例进行缓存。当 convertView 为空的时候,创建一个 ViewHolder 对象,并将控件的实例都存放在 ViewHolder 里,然后调用 View 的 setTag()方法,将 ViewHolder 对象存储在 View 中。当 convertView 不为空的时候则调用
View 的 getTag()方法,把 ViewHolder 重新取出。这样所有控件的实例都缓存在了 ViewHolder
里,就没有必要每次都通过 findViewById()方法来获取控件实例了。

五、长度单位怎么使用

px 是像素的意思,即屏幕中可以显示的最小元素单元,在像素不同的设备显示的大小会有出入。pt字体单位同理。

dp 是密度无关像素,比如手机宽是 2 英寸长是 3 英寸,如果它的分辨率是 320*480 像素,那么他的密度比是160dpi。pt字体单位同理。

总结一下,在编写 Android 程序的时候,尽量将控件或布局的大小指定成 match_parent 或 wrap_content,如果必须要指定一个固定值,则使用 dp 来作为单位,指定文字大小的时候使用 sp 作为单位。

安卓学习 之 UI控件(三)相关推荐

  1. 黑马程序员——IOS学习—基本UI控件的代码创建

    -----------Java培训.Android培训.IOS培训..Net培训.期待与您交流!------------  本节采用代码的方式系统了解一下IOS主要UI控件的创建和使用,在开始之前首先 ...

  2. 安卓开发入门教程-UI控件_EditText

    什么是EditText EditText是用于进行文本输入的UI控件. 基础样例 1.普通输入 效果图 代码 <EditTextandroid:layout_width="wrap_c ...

  3. 安卓入门系列-07常用UI控件(长文)

    常用UI控件 简介 这一篇介绍开发中的常用UI控件. 布局管理器 所有布局管理器都是ViewGroup的子类,都可作为容器类使用.继承自View,所以也可嵌套. 常见的布局之前已经提到了三种,这里不再 ...

  4. Android提供了哪些主要UI控件,Android必备:Android UI控件的了解与学习

    因为工做须要,最近一段时间,须要进行Android App开发的学习,以前简单的进行过Android的了解,对于基本的Android环境的搭建等已经有过整理,一个Android App是由一个或多个A ...

  5. android 获取控件高度_安卓开发入门教程UI控件_ImageView

    什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...

  6. android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

    什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...

  7. android ui组件开发教程,安卓开发入门教程-UI控件_Switch

    什么是Switch Switch是一种用于显示开关状态的UI控件. 基础样例 1.普通开关 效果图 代码 android:layout_width="wrap_content" a ...

  8. 安卓开发入门教程-UI控件_TextView

    什么是TextView TextView是用于展示文本内容的UI控件. 基础样例 1.普通文本 效果图 代码 <TextViewandroid:layout_width="wrap_c ...

  9. IOS 常用UI控件

    目录 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 具体内容 下拉刷新 EGOTableViewPullRefresh ...

最新文章

  1. 关于CSS样式浏览器兼容问题的一些注意事项
  2. 百度2020Q3财报:“十四五”规划注入新动能,百度智能云驶入快车道
  3. python分行_基于python实现对文件进行切分行
  4. 机器学习及大数据经典算法笔记汇总
  5. 用VC写Assembly代码(1)
  6. OpenGLES渲染
  7. 经典实战教程!java编译器eclipse
  8. 修复微商城提交购物车时部分手机号码不识别
  9. python 栈和队列_python实现栈和队列
  10. Qt - QVariant
  11. 答非所问:产品质量怎样?发现了很多BUG
  12. mysql 导出 客户端_Mysql 数据库攻击面
  13. Android 消息机制之 MessageQueue 消息队列
  14. VUE仿知乎网站(四)登录注册页面开发+表单验证
  15. POJ1568 四子棋 博弈
  16. java学习总结(16.06.03)java中数组的定义和初始化
  17. 怎样在网页中插入一条分割线
  18. TDengine:无模式写入行协议的四种方式
  19. 【自动驾驶】如何利用深度学习搭建一个最简单的无人驾驶系统
  20. (轻量级自适应加权网络图像超分辨)阅读笔记

热门文章

  1. Boost使用几条简单笔记
  2. 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案
  3. 字符串匹配算法(二):BM(BoyerMoore)算法、坏字符规则,好后缀规则
  4. 嗯?那你来说说用 ArrayList 还是 LinkedList
  5. 面试官:String的最大长度是多少?
  6. 网络编程套接字(二)
  7. 音视频技术开发周刊 | 238
  8. SRT协议在电视直播中的应用
  9. RT-Thread智能音箱音频应用实践
  10. FFmpeg在Intel GPU上的硬件加速与优化