资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

android界面,android界面设计实验报告

关于Android布局你不知道的

Android常见的5个布局,我想大家一定不会陌生。LinearLayout、RelativeLayout和FrameLayout也是使用频率较高的布局方式,做Android开发的一定使用过。

创新互联公司是一家集网站建设,汕城企业网站建设,汕城品牌网站建设,网站定制,汕城网站建设报价,网络营销,网络优化,汕城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

传统的5种布局方式:

不过我的问题并不是问面试者如何使用这些基础的布局,而是要看面试者怎么解决布局嵌套(影响性能)和屏幕适配问题。

我们都清楚Android界面的布局太复杂,嵌套层次过深,会使整个界面的测量、布局和绘制变得更复杂,对性能会造成影响。所以我们在写Layout文件时,也要尽量避免布局的嵌套层次过深的问题。

在怎么解决问题之前,我们得有一个好方法先判断当前的问题情况。Android SDK工具箱中有一个叫做Hierarchy Viewer的工具,能够在App运行时分析Layout。

注意: 在ROOT的手机,或者是安装开发版的ROM的手机可以直接使用Hierarchy Viewer。如果没有Root的手机(SDK 4.1及以上),需要在你的PC端添加一个环境变量“ANDROID_HVPROTO=ddm”。

下面列举一些面试者常使用的方式。

merge merge标签的作用是合并UI布局,使用该标签能降低UI布局的嵌套层次。

merge标签可用于两种情况:

ViewStub ViewStub标签引入的布局默认不会inflate,既不会显示也不会占用位置。 ViewStub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如数据加载进度布局、出错提示布局等。

需要在使用时手动inflate:

ViewStub在一定的程度可以起到减少嵌套层次的作用,特别是很多时候我们的程序可能不需要走到ViewStub的界面。

include 将可复用的组件抽取出来并通过include标签使用,但include标签能减少布局的层次吗?

我认为不能。include主要解决的是相同布局的复用问题,它并不能减少布局的层次。

用RelativeLayout代替LinearLayout

很多人为了减少布局层次喜欢用RelativeLayout代替LinearLayout,不过可能达到的效果并不会很明显。层次是减少了,但本身RelativeLayout就会比LinearLayout性能差一点。

有一些界面,比如一个图片和一个文本的布局(ListItem常见的布局方式),可以利用TextView有drawableLeft, drawableRight等属性,完全不需要RelativeLayout或者LinearLayout布局。

传统的布局方式存在一定的缺陷,如RelativeLayout要两次测量(measure)它的子View才能知道确切的高度;如果LinearLayout布局的子View有设置了layout_weight,那么它也需要测量两次才能获得布局的高度。

相对于传统的布局方式,Android官方还推出了两种新的布局方式:ConstraintLayout和FlexboxLayout。

ConstraintLayout ConstraintLayout即约束布局,在2016年由Google I/O推出。ConstraintLayout和RelativeLayout有点类似,控件之间根据依赖关系而存在,但比RelativeLayout更加灵活。创建大型复杂的布局仍然可以使用扁平的层级(不用嵌套View Group),说的简单些就是,再复杂的界面也可以只有2层层次。

要使用ConstraintLayout需要在build.gradle中添加相关的support库:

使用ConstraintLayout可以有效的解决布局嵌套过多导致的性能问题,官方也对其渲染性能进行了优化,并且ConstraintLayout支持可视化的方式编写布局。

不过学会熟练使用ConstraintLayout会需要一点时间,但这是值得的。

FlexBoxLayout 做过前端开发(CSS方面)的同学对FlexBox一定不会陌生,最近我在做微信小程序开发时也涉及到FlexBox。FlexBox(弹性布局)是w3c在2009年提出的一种新的布局方案,解决以前那种传统css的盒模型的局限性。

Google开源了FlexboxLayout布局和前端CSS FlexBox布局具有相同的功能(肯定有不一样的地方),但已经足够在Android上改进布局的构建方式。

FlexBoxLayout可以理解成一种更高级的LinearLayout,不过比LinearLayout更加强大和灵活。如果我们使用LinearLayout布局的话,那么不同的分辨率,也许我们要重新调整布局,势必会需要跟多的布局文件放在不同的资源目录。而使用FlexBoxLayout来布局的话,它可以适应各种界面的改变(所以叫响应式布局)。

如果对前端的Flexbox不太了解的话,你还需要补一些概念,好在这些东西在网上很容易找到。

可能很多读者会觉这样的面试题是吹毛求疵,很多项目中哪有这么复杂的界面,根本就用不到这些优化措施。

可以说厉害的人,或者叫高手,可能只是比较多在意这些细节而已。在实践中的经历告诉我,很多难于解决的性能问题,并不是因为有一个影响性能的问题无法攻克,而是没有一个明显的制约因素,是有各种小问题一点一点堆积起来,最终积重难返。

所以,把细节做好,或者意识到细节的地方可能引发的问题,对我们解决问题是很有帮助的,不要浪费了让你可以成长的细节。

有需要更多Android高级进阶和面试资料的朋友可以私信我获取

华为手机恢复出厂设置后开机一直停留在android这个界面,怎么办?

解决方案:

请先等待20分钟以上看是否可以进入系统,升完级后开机,系统会进行初始化,并且如果升级前安装的应用过多,可能导致开机需要的时间比较久。

如果等待结束仍无法进入系统,请尝试如下方法:

1、长按电源键,手机强制重启后重试。

(以下2和3操作均会清除手机的所有数据,请您谨慎操作)

2、长按音量上键+电源键检查是否能进入Recovery模式,如果可以,选择恢复出厂设置格式化用户空间进行修复。

3、通过华为手机助手修复或通过 eRecovery 恢复手机系统版本。

如果以上方法均无法解决,请到附近的华为客户服务中心检修,具体价格要以华为客户服务中心的最终检测的结果为准。

华为客户服务中心地址信息查询方法如下:

1、 通过手机自带会员服务APP里面的“服务--服务网点”页面,可以帮查询到最近的服务中心;

2、也可以在华为商城官网页面最下方有售后网点查询地址入口;

3、微信中关注“华为终端客户服务”公众号,在“服务支持”中点击“服务中心查询”也可以查询。

注:如果您之前没有备份数据,维修过程中手机数据可能会丢失。

Android设置界面之Preference

Android 系统为设置界面的UI提供了一系列的接口,设置界面的部分和 Activity 是分离的,会有一个 PreferenceScreen 的对象

是根目录,在其中会包含 CheckBoxPreference EditTextPreference ListPreference PreferenceCategory RingtonePreference

由于设置的界面是使用 Preference 而不是 View 来创建的,需要特殊的 Activity 或者 Fragment 的子类来显示

可以在运行时创建 Preference 也可以通过在xml中定义 Preference ,每一个 Preference 的子类都可以用XML中的元素来定义,在 res/xml/

文件夹中创建一个文件如 preference.xml

preference.xml 一般的布局如下:

在高于 Android 3.0(API 10) 的版本,应该使用 PreferenceFragment 来显示 Preference ,就不需要继承 PreferenceActivity

继承 PreferenceFragment 在 onCreate() 方法中调用 addPreferencesFromResource() 方法

创建一个 Activity ,然后将定义的Fragments添加到当前的 Activity 中,最终呈现的效果和 PreferenceActivity 是一样的

extras 元素中的内容,可以通过 Bundle 获得,通过方法 getArguments() 获取

显示headers使用 PreferenceActivity 的回调方法 onBuildHeaders() 加载preference-headers.xml文件

通过 Preference 的属性 android:layout="" 设置自定义的layout文件

关于Android界面组件的基本用法

1.文本框(TextView)和编辑框(EditText)

文本框(TextView)不允许用户编辑文本内容,而编辑框(EditText)允许用户编辑文本内容

2.按钮(Button)和图片按钮(ImageButton)

Button显示文字,ImageButton显示图片。

为ImageButton指定android:text属性没用,不会显示文字

可以指定android:background为按钮增加背景图片,但这图片是固定的

可以指定android:src为图片按钮增加图片属性

其实,src才是设置图标,而background只是设置背景。

如果控件的大小是100 100 图片资源是80 80的话,那么用src,图片就会居中显示,如果使用background那么图片就会被拉伸充满控件。

重要的是,background是底层的图片资源,src是覆盖在background上面的资源,他们可以叠加使用,实现选中的效果。

3.单选按钮(RadioButton)和复选框(CheckBox)

多了一个android:checked属性,用于指定初始时是否被选中

4.计时器组件Chronometer用法

红色字体表示常用的方法

5.图像视图(ImageView)

它支持属性android:scaleType setScaleType(ImageView.ScaleType)

matrix(ImageView.ScaleType.MATRIX):使用matrix方式进行

fixXY(ImageView.ScaleType.FIX_XY):对图片横向纵向独立缩放,会改变纵横比

fitStart(ImageView.ScaleType.FIT_START):保持纵横比,图片较长的边长与ImageView相应的边长相等,缩放后放在左上角

fitCenter(ImageView.ScaleType.FIT_CENTER):保持纵横比,图片较长的边长与ImageView相应的边长相等,缩放后放在中央

fitEnd(ImageView.ScaleType.FIT_END):保持纵横比,图片较长的边长与ImageView相应的边长相等,缩放后放在右下角

center(ImageView.ScaleType.CENTER):放中间,不缩放

centerCrop(ImageView.ScaleType.CENTER_CROP):保持纵横比,使图片能完全覆盖ImageView

centerInside(ImageView.ScaleType.CENTER_INSIDE):保持纵横比,使ImageView能完全显示图片

6.spinner的功能和用法

如果可以确定spinner里面的列表项,那么直接在/res/layout/main.xml里面指定

然后在/res/value/string.xml里面指定

如果不确定里面的列表项,那么必须要提供一个Adapter,这个Adapter负责决定Spinner列表每项的内容

7.日期、时间选择器(DatePicker和TimePicker)

8.自动完成文本框(AutoCompleteTextView)

比普通文本框多了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单后,组件会按用户选择自动填写该文本框

使用该组件很简单,只要为它设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本

9.进度条(ProgressBar)

通过style属性可以为ProgressBar指定风格。该属性可以有如下的属性值:

1.@android:style/Widget.ProgressBar.Horizontal 水平进度条

2.@android:style/Widget.ProgressBar.Inverse 不断跳跃、旋转画面的进度条

3.@android:style/Widget.ProgressBar.Large 大进度条

4.@android:style/Widget.ProgressBar.Large.Inverse不断跳跃、旋转画面的大进度条

5.@android:style/Widget.ProgressBar.Small 小进度条

6.@android:style/Widget.ProgressBar.Small.Inverse不断跳跃、旋转画面的小进度条

ProgressBar提供如下方法来操作进度

1.setProgress(int) 设置进度的完成百分比

2.incrementProgressBy(int) 设置进度条的增加或减少。参数为正增加,参数为负减少

10.选项卡(TabHost)

TabHost仅仅只是一个简单的容器,它提供如下方法

1.newTabSpec(String tag) 创建选项卡

2.addTab(TabHost.TabSpec tabSpec) 添加选项卡

使用TabHost的一般步骤为:

• A. 在界面中定义TabHost组件,并为该组件定义该选项卡的内容

• B. Activity应该继承TabActivity

• C. 调用TabActivity的getTabHost()来获取TabHost对象

• D. 通过TabHost对象的方法来创建选项卡、添加选项卡

选项卡主要由TabHost、TabWidget、FrameLayout3个组件组成,三者缺一不可,想象一下选项卡的特点,多个卡重叠在一起,所以用FrameLayout即帧布局是必要的。另外需要注意的是TabHost、TabWidget、FrameLayout三个组件的android:id必须使用系统默认的名称,而不能自己随意定义,否则会出错。

11.图像切换器(ImageSwitcher)

12.网格视图(GridView)

使用GridView一般指定numColumn大于1,否则取默认值为1.那么GridView就变成了ListView

属性android:stretchMode支持如下属性

1.none 不拉伸

2.spacingWidth 仅拉伸元素之间的间距

3.spacingWidthUniform 表格、元素之间的间距一起拉伸

4.columnWidth 仅拉伸表格

13.画廊视图(Gallery)(现在已经被弃用了,不过还是列出来吧)

Gallery用法很简单——为它提供一个内容Adapter,该Adapter的getView方法所返回的View可作为Gallery的列表项。可以通过OnItemSelectedListener监听选择项的改变

14.列表试图(ListView和ListActivity)

1.创建ListView由两种方式:

2.直接使用ListView进行创建

让Activity继承ListActivity(继承了ListActivity的类无需调用setContentView()来显示页面,可以直接设置适配器)

一旦获得ListView后,就要创建显示的列表项了。需要借助内容Adapter,内容Adapter负责提供需要显示的列表项

创建ArrayAdapter时必须指定一个textViewResourceId,该参数决定每个列表项的外观

1.simple_list_item_1 每个列表项是普通的TextView

2.simple_list_item_2 每个列表项是普通的TextView(字体略大)

3.simple_list_item_checked 每个列表项是已勾选的列表项

4.simple_list_item_multiple_choice 每个列表项是带多选框的文本

5.simple_list_item_single_choice 每个列表项是带多单选按钮的文本

15.使用AlertDialog

1.创建AlertDialog.Builder对象,该对象是AlertDialog的创建器

2.调用AlertDialog.Builder方法为对话框设置图标、标题等

3.调用AlertDialog.Builder的create()方法创建AlertDialog对话框

4.调用AlertDialog的show()方法显示对话框

16.使用Toast显示提示框

步骤如下:

• 调用Toast构造器或makeText方法创建Toast对象

• 调用Toast方法来设置该消息的对齐方式等

• 调用Toast的show()方法显示出来

• Toast toast = Toast.makeText(ToastTest.this, "信息", Toast.LENGTH_LONG).show();

17.Notification(一般显示网络状态、电池状态、时间等)

使用Notification发送Notification步骤:

• 调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的Notification Manager服务

• 通过构造器创建一个Notification对象

• 为Notification设置属性

• 通过Notification Manager发送Notification

Android中怎么样把界面上应用的名字给去掉啊

若使用的是vivo手机,经典桌面图标下方的文字不可删除或隐藏,Origin OS探索桌面图标名字默认隐藏。


当前文章:android界面,android界面设计实验报告
分享地址:http://cdkjz.cn/article/dsdedgd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220