Android开发时无法正确按照响应样式显示解决办法
记最近在做移动混合应用的开发,遇到的一个问题:android无法按照指定的响应样式正确显示。
首先说一下两次遇到此问题的环境:
1.使用jQuery Mobile写界面时,在测试机上(G7)字体和界面显示偏小。
2.在G7上使用自定义的响应样式进行布局时没有问题,界面显示正常。但在小米2S上,界面却显示错误。通过JS脚本获取了一下小米2S的屏幕宽度,发现获得的值并不是想像的720px,而是360px,所以响应的样式会发生错误。
在没有设置target-densitydpi时
在设置target-densitydpi时,得到正确的响应布局
原来在android上,会通过 target-densitydpi 来获取DPI。在不设置的情况下,默认选择的是 medium-dpi(160)。
上面的两个问题,可以通过给元标签添加target-densitydpi=device-dpi
来解决,代码如下。
代码如下 | 复制代码 |
<meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> |
关于ImageView的手势缩放,有很多种方法,绝大多数开源自定义缩放都是修改了ondraw函数来实现的。但是ImageView本身有scaleType属性,通过设置android:scaleType="matrix" 可以用很少的代码就实现缩放功能。缩放的优点是实现起来简单,同时因为没有反复调用ondraw函数,缩放过程中不会有闪烁现象。
MATRIX矩阵可以动态缩小放大图片来显示,缩小图片:
代码如下 | 复制代码 |
//获得Bitmap的高和宽 |
下面将一个自定义的实现了手势缩放的ImageView代码拷贝如下:
代码如下 | 复制代码 |
package com.jcodecraeer.stargallerry;
<com.jcodecraeer.stargallerry.ImageTouchView |
这里有个小细节, android:layout_width和android:layout_height这里都是="match_parent" ,如果我们换成wrap_content的话,你会发现图片只能在一个很小的区间缩放。而match_parent则可以很随意的在整个屏幕缩放。
但是match_parent导致了一个让人意外的问题:
如果将imageView的宽度和高度都设置为填充整个父控件,然后scaleType设置成Matrix,则图片不是居中显示的,整个图片靠上去了,这里我还没有找出原因,不过在网上找出了解决的办法:
“
先设置ImageView的ScaleType="CENTER"
要给控件添加拖动与放大缩水前。再把ScaleType设为:"Matric"
(即ImageView设置OnTouchListener前更改属性即可)
”
其中“ImageView设置OnTouchListener前更改属性”在我们这个例子中应替换为在caseMotionEvent.ACTION_MOVE://移动事件开始更改属性。在代码中更改ScaleType应该这样做:
this.setScaleType(ImageView.ScaleType.MATRIX);
说到ScaleType,我们看看ImageView.ScaleType 值的意义和区别:
CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示
MATRIX / matrix 用矩阵来绘制
本文章来给各位同学详细的介绍一下关于Android Ant命令行编译和APK签名详解一些实现方法,这是一个朋友在自己做安卓开发时写的,希望对大家会有所帮助呀。最近在做Android开发时,需要引用第三方的代码进项目,一般情况下,直接在Eclipse下设置需要导入的代码的编译输出为library即可,但是很多代码在Eclipse下编译会出现很多莫名其妙的错误。因而只能使用命令行方式对代码进行编译。具体方法如下:
1.安装编译用的Java,安装Android Platform-tools,安装Ant,设置好各种环境变量。部分Linux下Ant已经默认集成,Windows下需要自行安装。
2.使用Android工具更新代码的编译配置。
3.使用Ant工具进行编译,可编译Debug版和Release版本。
4.生成代码签名用的私钥,并对APK进行签名。
5.对APK文件进行对齐,对大文件APK有不错的效果。
以下是参考Bash代码,可自己需要更改,执行时,sudo bash XXX.sh即可
代码如下 | 复制代码 |
# Setup Java Home |
说明:
更新Android的ant编译配置,如果代码的结构发生变更,请执行,如果代码中包含引用的第三方库代码,需要分别对这些代码进行更新。
代码如下 | 复制代码 |
# Update current project |
生成签名用的Keystore文件,几个参数的说明
-genkey 生成秘钥证书
-alias 别名
-keyalg 秘钥的计算算法
-validity 有效期
-keystore 秘钥库文件路径
-storepass 秘钥库密码
-keypass 秘钥证书密码
-dname 发行者信息
CN= 发行者姓名 (个人姓名或产品名)
OU= 组织单元名 (团队名)
O= 组织机构名 (公司名)
L= 城市/地区
ST= 州/省
C= 国家代码
代码如下 | 复制代码 |
# Make keystone |
生成ant自动编译用的ant.properties文件,设置key.store和key.alias两个变量后,ant release时会自动对生成的APK签名和对齐
代码如下 | 复制代码 |
echo "key.store=product.keystore" > ant.properties |
手动对代码签名,几个参数的说明
-verbose 显示输出
-keystore keystore别名
-signedjar 签名apk文件,第一个参数为目标文件,第二个为未签名apk
代码如下 | 复制代码 |
# Sign APK |
手动对APK进行对齐
代码如下 | 复制代码 |
# Zip align apk |
前几天用Eclipse写程序的试试,突然就不能运行了,报了个奇怪的错误。
[2010-02-03 10:31:14 - androidVNC]Error generating final archive:
Debug certificate expired on 1/30/10 2:35 PM!
解决的办法比较简单:
将debug.keystore直接删除。Android SDK发现debug.keystore丢失了,就会自个生成一个新的。再运行SDK
不同系统位置不同
删除Android的debug certificate即可。
Linux/Mac OS : ~/.android/debug.keystore
Windows: %USERPROFILE%/.android
下面以数字、电话为例讲述EditText怎么设置输入类型,其他类型可以参考InputType类。
1) 只能输入数字
代码如下 | 复制代码 |
EditText et = (EditText) findViewById(R.id.etTest); |
2) 只能输入电话号码
代码如下 | 复制代码 |
EditText et = (EditText) findViewById(R.id.etTest); |
3) 邮箱地址
代码如下 | 复制代码 |
EditText et = (EditText) findViewById(R.id.etTest); |
4) 禁止输入任何文本
代码如下 | 复制代码 |
EditText et = (EditText) findViewById(R.id.etTest); |
// 禁止输入(不弹出输入法)上述也是隐藏输入法的一种方式,还有另外一种隐藏办法,
可查看android隐藏IME(输入法)输入框
不让程序默认升起IME输入框有两种方法:
1.让EditText失去焦点,使用EditText的clearFocus方法
2.强制隐藏Android输入法窗口,在IME类中我们通过实例化输入法控制对象,通过hideSoftInputFromWindow来隐藏IME输入框。
代码
代码如下 | 复制代码 |
Toast.makeText(WindowBackgroundColorActivity.this, "焦点改变", Toast.LENGTH_SHORT).show(); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //第一种方法 //imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); //第二种方法 imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); |
参考代码:
代码如下 | 复制代码 |
<EditText android:id="@+id/etTest" android:inputType="number" |
相关文章
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25php中json_decode()和json_encode()用法与中文不显示解决办法
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25- 在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
- 401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
- Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
- 今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- 下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
- 自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
- 这篇文章主要介绍了解决vant-UI库修改样式无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-03