买中超比赛app;开发app 我们遇到了问题的问题怎么解决?

6214人阅读
H5页面适配(3)
转过来,平时看看。虽然还有很多问题至今无解。比如:华为麒麟950的P8和meta打开我们的应用首页经常偶发白屏。!!
1、安卓浏览器看背景图片,有些设备会模糊。
用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?
经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页,这样字会非常小,所以苹果当初就把iPhone 4的960640分辨率,在网页里只显示了480320,这样devicePixelRatio=2。现在android比较乱,有1.5的,有2的也有3的。
想让图片在手机里显示更为清晰,必须使用2x的背景图来代替img标签(一般情况都是用2倍)。例如一个div的宽高是100100,背景图必须得200200,然后background-size:,这样显示出来的图片就比较清晰了。
代码如下:
background:url(../images/icon/all.png)&no-
-webkit-background-size:50px&50
background-size:&50px&50display:inline-&width:100%;&height:50
或者指定 background-size:都可以,大家试试!
2、图片加载
若您遇到图片加载很慢的问题,对这种情况,手机开发一般用canvas方法加载:
具体的canvas API 参见:/htmlapi/canvas.html
下面举例说明一个canvas的例子:
&li&&canvas&&/canvas&&/li&
js动态加载图片和li 总共举例17张图片!
var&total=17;
var&zWin=$(window);
var&render=function(){
&var&padding=2;
&var&winWidth=zWin.width();
&var&picWidth=Math.floor((winWidth-padding*3)/4);
&var&tmpl&='';
&for&(var&i=1;i&=i++){
&var&imgSrc='img/'+i+'.jpg';
&if(i%4==1){
&tmpl&+='&li style=&width:'+picWidth+'height:'+picWidth+'padding-left:'+p+'padding-top:'+padding+'&&&canvas id=&cvs_'+i+'&&&/canvas&&/li&';
&var&imageObj&=&new&Image();
&imageObj.index&=&i;
&imageObj.onload&=&function(){
& &var&cvs&=$('#cvs_'+this.index)[0].getContext('2d');
& &cvs.width&=&this.
& &cvs.height=this.
& &cvs.drawImage(this,0,0);
&imageObj.src=imgS
3、假如手机网站不用兼容IE浏览器,一般我们会使用zeptojs。
zeptojs内置Touch events方法,具体可以看/#Touch events
看了一下zeptio新版的API,已经支持IE10以上浏览器,对zeptojs可以选择使用!
4、防止手机中网页放大和缩小。
这点是最基本的,最为手机网站开发者来说应该都知道的,就是设置meta中的viewport
还有就是,有些手机网站我们看到如下声明:
&!DOCTYPE html PUBLIC &-//WAPFORUM//DTD XHTML Mobile 1.0//EN& &http://www.wapforum.org/DTD/xhtml-mobile10.dtd&&
设置了DTD的方式是XHTML的写法,假如我们页面运用的是html5,可以不用设置DTD,直接声明&!DOCTYPE html&。
使用viewport使页面禁止缩放。 通常把user-scalable设置为0来关闭用户对页面视图缩放的行为
&meta&name=&viewport&&content=&user-scalable=0&&/&
但是为了更好的兼容,我们会使用完整的viewport设置。
&meta&name=&viewport&&content=&width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0&&/&
当然,user-scalable=0,有的人也写成user-scalable=no,都可以的。
5、apple-mobile-web-app-capable
apple-mobile-web-app-capable是设置Web应用是否以全屏模式运行。
&meta&name=&apple-mobile-web-app-capable&&content=&yes&&
如果content设置为yes,Web应用会以全屏模式运行,反之,则不会。content的默认值是no,表示正常显示。你可以通过只读属性window.navigator.standalone来确定网页是否以全屏模式显示。
6、format-detection
format-detection 启动或禁用自动识别页面中的电话号码。
&meta&name=&format-detection&&content=&telephone=no&&
默认情况下,设备会自动识别任何可能是电话号码的字符串。设置telephone=no可以禁用这项功能。
7、html5调用安卓或者ios的拨号功能
html5提供了自动调用拨号的标签,只要在a标签的href中添加tel:就可以了。
&a&href=&tel:1&/a&
8、html5GPS定位功能
具体请看:
9、上下拉动滚动条时卡顿、慢
&-webkit-overflow-scrolling:
&overflow-scrolling:
10、禁止复制、选中文本
&-webkit-user-select:&
&-moz-user-select:&
&-khtml-user-select:&
& user-select:&
解决移动设备可选中页面文本(视产品需要而定)
11、长时间按住页面出现闪退
&-webkit-touch-callout:&
12、iphone及ipad下输入框默认内阴影
&-webkit-appearance:&
13、ios和android下触摸元素时出现半透明灰色遮罩
&-webkit-tap-highlight-color:rgba(255,255,255,0)
14、active兼容处理 即 伪类 :active 失效
方法一:body添加ontouchstart
&body&ontouchstart=&&&
方法二:js给 document 绑定 touchstart 或 touchend 事件
color:�
a:active&{
&a&herf=foo&&bar&/a&
document.addEventListener('touchstart',function(){},false);
15、动画定义3D启用硬件加速
&-webkit-transform:translate3d(0,&0,&0)
&transform:&translate3d(0,&0,&0);
16、Retina屏的1px边框
具体请百度谷歌关键字,解决方案有很多
17、webkit mask 兼容处理
某些低端手机不支持css3 mask,可以选择性的降级处理。
比如可以使用js判断来引用不同class:
if(&'WebkitMask'&in document.documentElement.style){
&alert('支持mask');
&alert('不支持mask');
18、旋转屏幕时,字体大小调整的问题
html,&body,&form,&fieldset,&p,&div,&h1,&h2,&h3,&h4,&h5,&h6&{
&-webkit-text-size-adjust:100%;
19、transition闪屏
/设置内嵌的元素在 3D 空间如何呈现:保留3D /
-webkit-transform-style:&preserve-3d;
/ 设置进行转换的元素的背面在面对用户时是否可见:隐藏 /
-webkit-backface-visibility:
20、圆角bug
某些Android手机圆角失效
background-clip:&padding-
21、顶部状态栏背景色
&meta&name=&apple-mobile-web-app-status-bar-style&&content=&black&&/&
除非你先使用apple-mobile-web-app-capable指定全屏模式,否则这个meta标签不会起任何作用。
如果content设置为default,则状态栏正常显示。如果设置为blank,则状态栏会有一个黑色的背景。如果设置为blank-translucent,则状态栏显示为黑色半透明。
如果设置为default或blank,则页面显示在状态栏的下方,即状态栏占据上方部分,页面占据下方部分,二者没有遮挡对方或被遮挡。
如果设置为blank-translucent,则页面会充满屏幕,其中页面顶部会被状态栏遮盖住(会覆盖页面20px高度,而iphone4和itouch4的Retina屏幕为40px)。
默认值是default。
22、设置缓存
&meta&http-equiv=&Cache-Control&&content=&no-cache&&/&
手机页面通常在第一次加载后会进行缓存,然后每次刷新会使用缓存而不是去重新向服务器发送请求。如果不希望使用缓存可以设置no-cache。
23、桌面图标
&link&rel=&apple-touch-icon&&href=&touch-icon-iphone.png&&/&
&link&rel=&apple-touch-icon&&sizes=&76x76&&href=&touch-icon-ipad.png&&/&
&link&rel=&apple-touch-icon&&sizes=&120x120&&href=&touch-icon-iphone-retina.png&&/&
&link&rel=&apple-touch-icon&&sizes=&152x152&&href=&touch-icon-ipad-retina.png&&/&
iOS下针对不同设备定义不同的桌面图标。如果不定义则以当前屏幕截图作为图标。
上面的写法可能大家会觉得会有默认光泽,下面这种设置方法可以去掉光泽效果,还原设计图的效果!
&link&rel=&apple-touch-icon-precomposed&&href=&touch-icon-iphone.png&&/&
图片尺寸可以设定为57*57(px)或者Retina可以定为114*114(px),ipad尺寸为72*72(px)
24、启动画面
&link&rel=&apple-touch-startup-image&&href=&start.png&/&
iOS下页面启动加载时显示的画面图片,避免加载时的白屏。
可以通过madia来指定不同的大小:
&!--iPhone--&
&link&href=&apple-touch-startup-image-320x460.png&&media=&(device-width: 320px)&&rel=&apple-touch-startup-image&&/&
&!-- iPhone Retina --&
&link&href=&apple-touch-startup-image-640x920.png&&media=&(device-width: 320px) and (-webkit-device-pixel-ratio: 2)&&rel=&apple-touch-startup-image&&/&
&!-- iPhone 5 --&
&link&rel=&apple-touch-startup-image&&media=&(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)&&href=&apple-touch-startup-image-640x1096.png&&
&!-- iPad portrait --&
&link&href=&apple-touch-startup-image-768x1004.png&&media=&(device-width: 768px) and (orientation: portrait)&&rel=&apple-touch-startup-image&&/&
&!-- iPad landscape --&
&link&href=&apple-touch-startup-image-748x1024.png&&media=&(device-width: 768px) and (orientation: landscape)&&rel=&apple-touch-startup-image&&/&
&!-- iPad Retina portrait --&
&link&href=&apple-touch-startup-image-.png&&media=&(device-width: 1536px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)&&rel=&apple-touch-startup-image&&/&
&!-- iPad Retina landscape --&
&link&href=&apple-touch-startup-image-.png&media=&(device-width: 1536px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)&rel=&apple-touch-startup-image&&/&
25、浏览器私有及其它meta
以下属性在项目中没有应用过,可以写一个demo测试以下!
&!-- QQ浏览器私有 --&
&!-- 全屏模式 --&
&meta&name=&x5-fullscreen&&content=&true&&
&!-- 强制竖屏 --&
&meta&name=&x5-orientation&&content=&portrait&&
&!-- 强制横屏 --&
&meta&name=&x5-orientation&&content=&landscape&&
&!-- 应用模式 --&
&meta&name=&x5-page-mode&&content=&app&&
&!-- UC浏览器私有 --&
&!-- 全屏模式 --&
&meta&name=&full-screen&&content=&yes&&
&!-- 强制竖屏 --&
&meta&name=&screen-orientation&&content=&portrait&&
&!-- 强制横屏 --&
&meta&name=&screen-orientation&&content=&landscape&&
&!-- 应用模式 --&
&meta&name=&browsermode&&content=&application&&
其它,针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓
&meta&name=&HandheldFriendly&&content=&true&&
微软的老式浏览器
&meta&name=&MobileOptimized&&content=&320&&
windows phone 点击无高光
&meta&name=&msapplication-tap-highlight&&content=&no&&
26、 IOS中input键盘事件keyup、keydown、keypress支持不是很好
问题是这样的,用input search做模糊搜索的时候,在键盘里面输入关键词,会通过ajax后台查询,然后返回数据,然后再对返回的数据进行关键词标红。
用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中变红很慢,用输入法输入之后,并未立刻相应keyup事件,只有在通过删除之后才能相应!
解决办法:
可以用html5的oninput事件去代替keyup
&input&type=&text&&id=&testInput&&
&script&type=&text/javascript&&
&document.getElementById('testInput').addEventListener('input',&function(e){
& &var&value&=&e.target.
然后就达到类似keyup的效果!
27、h5网站input 设置为type=number的问题
h5网页input 的type设置为number一般会产生三个问题,一个问题是maxlength属性不好用了。另外一个是form提交的时候,默认给取整了。三是部分安卓手机出现样式问题。
问题一解决,我目前用的是js。如下
&input&type=&number&&oninput=&checkTextLength(this&,10)&&
function checkTextLength(obj, length) {
& & &if(obj.value.length & length) &{ & &
& & & &obj.value = obj.value.substr(0, length);
问题二,是因为form提交默认做了表单验证,step默认是1,要设置step属性,假如保留2位小数,写法如下:
&input&type=&number&&step=&0.01&&/&
关于step,我在这里做简单的介绍,input 中type=number,一般会自动生成一个上下箭头,点击上箭头默认增加一个step,点击下箭头默认会减少一个step。number中默认step是1。也就是step=0.01,可以允许输入2位小数,并且点击上下箭头分别增加0.01和减少0.01。
假如step和min一起使用,那么数值必须在min和max之间。
看下面的例子:
&input&type=&number&&step=&3.1&&min=&1&&/&
输入框可以输入哪些数字?
首先,最小值是1,那么可以输入1.0,第二个是可以输入(1+3.1)那就是4.1,以此类推,每次点击上下箭头都会增加或者减少3.1,输入其他数字无效。这就是step的简单介绍。
问题三,去除input默认样式
input[type=number] {
&-moz-appearance:
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
&-webkit-appearance:
&margin: 0;
28、ios 设置input 按钮样式会被默认样式覆盖
解决方式如下:
textarea&{
&border:&0;
&-webkit-appearance:&
设置默认样式为none
29、IOS键盘字母输入,默认首字母大写
解决方案,设置如下属性
&input&type=&text&&autocapitalize=&off&&/&
30、select 下拉选择设置右对齐
设置如下:
select option {
direction:
31、通过transform进行skew变形,rotate旋转会造成出现锯齿现象
可以设置如下:
-webkit-transform: rotate(-4deg) skew(10deg) translateZ(0);
transform: rotate(-4deg) skew(10deg) translateZ(0);
outline: 1px solid rgba(255,255,255,0)
32、移动端点击300ms延迟
300ms尚可接受,不过因为300ms产生的问题,我们必须要解决。300ms导致用户体验并不是很好,解决这个问题,我们一般在移动端用tap事件来取代click事件。
推荐两个js,一个是fastclick,一个是tap.js
关于300ms延迟,具体请看:http://thx.github.io/mobile/300ms-click-delay/
33、移动端点透问题
案例如下:
&div&id=&haorooms&&点头事件测试&/div&
&a&href=&#&&&/a&
div是绝对定位的蒙层,并且z-index高于a。而a标签是页面中的一个链接,我们给div绑定tap事件:
$('#haorooms').on('tap',function(){
$('#haorooms').hide();
我们点击蒙层时 div正常消失,但是当我们在a标签上点击蒙层时,发现a链接被触发,这就是所谓的点透事件。
touchstart 早于 touchend 早于click。 亦即click的触发是有延迟的,这个时间大概在300ms左右,也就是说我们tap触发之后蒙层隐藏, 此时 click还没有触发,300ms之后由于蒙层隐藏,我们的click触发到了下面的a链接上。
(1)尽量都使用touch事件来替换click事件。例如用touchend事件(推荐)。
(2)用fastclick,/ftlabs/fastclick
(3)用preventDefault阻止a标签的click
(4)延迟一定的时间(300ms+)来处理事件 (不推荐)
(5)以上一般都能解决,实在不行就换成click事件。
下面介绍一下touchend事件,如下:
$(&#haorooms&).on(&touchend&,&function&(event)&{
& event.preventDefault();
34、消除 IE10 里面的那个叉号
input:-ms-clear{display:}
35、关于 iOS 与 OS X 端字体的优化(横竖屏会出现字体加粗不一致等)
iOS 浏览器横屏时会重置字体大小,设置 text-size-adjust 为 none 可以解决 iOS 上的问题,但桌面版 Safari 的字体缩放功能会失效,因此最佳方案是将 text-size-adjust 为 100% 。
-webkit-text-size-adjust:&100%;
-ms-text-size-adjust:&100%;
text-size-adjust:&100%;
36、关于 iOS 系统中,中文输入法输入英文时,字母之间可能会出现一个六分之一空格
可以通过正则去掉
this.value&=&this.value.replace(/\u2006/g,&'');
37、移动端 HTML5 audio autoplay 失效问题
这个不是 BUG,由于自动播放网页中的音频或视频,会给用户带来一些困扰或者不必要的流量消耗,所以苹果系统和安卓系统通常都会禁止自动播放和使用 JS 的触发播放,必须由用户来触发才可以播放。
解决方法思路:先通过用户 touchstart 触碰,触发播放并暂停(音频开始加载,后面用 JS 再操作就没问题了)。
解决代码:
document.addEventListener('touchstart',&function&()&{
&document.getElementsByTagName('audio')[0].play();
&document.getElementsByTagName('audio')[0].pause();
38、移动端 HTML5 input date 不支持 placeholder 问题
这个我感觉没有什么好的解决方案,用如下方法
&input&placeholder=&Date&&class=&textbox-n&&type=&text&&onfocus=&(this.type='date')&&&id=&date&&
有的浏览器可能要点击两遍!
39、部分机型存在type为search的input,自带close按钮样式修改方法
有些机型的搜索input控件会自带close按钮(一个伪元素),而通常为了兼容所有浏览器,我们会自己实现一个,此时去掉原生close按钮的方法为
#Search::-webkit-search-cancel-button{
&display:&
如果想使用原生close按钮,又想使其符合设计风格,可以对这个伪元素的样式进行修改。
40、唤起select的option展开
zepto方式:
$(sltElement).trrgger(&mousedown&);
原生js方式:
function&showDropdown(sltElement)&{
&event&=&document.createEvent('MouseEvents');
&event.initMouseEvent('mousedown',&true,&true,&window);
&sltElement.dispatchEvent(event);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13413次
排名:千里之外
(1)(1)(2)(3)(1)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'webAPP开发中遇到的问题以及解决方法
页面实现弹性滚动,在安卓&ios4
和 android2.2&版本以下的手机不支持:
ios4 和 android2.2 以下不支持
position:fixed
ios 和&android2.3
以下不支持 overflow:auto
ios4 和 android 不支持
overflow-scrolling
解决方法有两种,不支持固定:
1.使用position:absolute
弹性滚动区域
html,body{height:100%;}.wrap{width:100%;}.header,.footer{height:40px;line-height:40px;background-color:#D8D8D8;text-align:center;}.header{position:
absolute;top:0;left:0;width:100%;}.footer{position:
absolute;bottom:0;left:0;width:100%;}.main{position:absolute;z-index:1;top:40px;left:0;bottom:40px;width:100%;}
overflow:auto;
-webkit-overflow-scrolling: touch;
2.使用display:flex
弹性滚动区域
html,body{height:100%;}
.wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;}
.header,.footer{height:40px;line-height:40px;background-color:#D8D8D8;text-align:center;}
.main{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:100%;}
overflow:auto;
-webkit-overflow-scrolling: touch;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。App 开发外包注意事项有哪些? - 知乎3486被浏览284451分享邀请回答/r/TFZFXSbEo3vcrWI_9wNe (二维码自动识别)93092 条评论分享收藏感谢收起20636 条评论分享收藏感谢收起查看更多回答3 个回答被折叠()开发一个 app 有多难? - 知乎5944被浏览903490分享邀请回答83790 条评论分享收藏感谢收起29868 条评论分享收藏感谢收起查看更多回答7 个回答被折叠()4584人阅读
android开发中遇到的问题点滴(14)
244.http请求的url含有中字符时,需要Uri编码。Uri.encoder()
245.使用androidstudio时,不知道什么原因svn不见了
Please make sure that the “SubversionIntegration” plugin is enabled in Preferences & Plugins
246.Error:Execution failed for task ‘:app:dexDebug’.& com.mon.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘/home/xxx/tools/android/jdk1.7.0_71/bin/java” finished with non-zero exit value 2
检查下是否多次引用同一个jar包
1. module下jar包版本不同
同一个module 在libs中包含乐.jar,而在src下又把相应的source页加入了
gradle中是否重复编译,
已经加了compile fileTree(include: [‘*.jar’], dir: ‘libs’)
然而在下面又加一句compile files(‘libs/xxx.jar’)
246.android handler的警告Handler Class Should be Static or Leaks Occur
在使用Handler更新UI的时候public class SampleActivity extends Activity {
private final Handler mLeakyHandler = new Handler() {
public void handleMessage(Message msg) {
}会包上述warning 会导致内存泄露
原因在于匿名内部类handler持有activity的引用,当activity finish后 handler还没有处理完,导致activity的view和resource资源不能得到释放,导致内存泄露
针对这个问题google官方给出了正确的做法
通过静态内部类 包含activity的弱引用来处理。
public class SampleActivity extends Activity {
* Instances of static inner classes do not hold an implicit
* reference to their outer class.
private static class MyHandler extends Handler {
private final WeakReference mA
public MyHandler(SampleActivity activity) {
mActivity = new WeakReference&SampleActivity&(activity);
public void handleMessage(Message msg) {
SampleActivity activity = mActivity.get();
if (activity != null) {
private final MyHandler mHandler = new MyHandler(this);
* Instances of anonymous classes do not hold an implicit
* reference to their outer class when they are “static”.
private static final Runnable sRunnable = new Runnable() {
public void run() { }
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Post a message and delay its execution for 10 minutes.
mHandler.postDelayed(sRunnable, 60 * 10 * 1000);
// Go back to the previous Activity.
247.androidstudio不同tab切换
248.androidstudio 如何自动import用到的类或接口?
For Windows/Linux, you can go to File -& Settings -& Editor -& General -& Auto Import -& Java and make the following changes:
change Insert imports on paste value to All
markAdd unambigious imports on the fly option as checked
On a Mac, do the same thing in Android Studio -& Preferences
249.Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/home/cenuser/android/android-ndk-r7b/build/core/build-local.mk:130: *** Android NDK: Aborting
cd到jni目录。或者 ndk-build -C your_project_path
250 .Why do I want to avoid non-default constructors in fragments?
fragment设置参数正确的做法
Make a bundle object and insert your data (in this example your Category object). Be careful, you can't pass this object directly into the bundle, unless it's serializable. I think it's better to build your object in the fragment, and put only an id or something else into bundle. This is the code to create and attach a bundle:
Bundle args = new Bundle();
args.putLong("key", value);
yourFragment.setArguments(args);
After that, in your fragment access data:
Type value = getArguments().getType("key");
That's all.
251. ubuntu下删除.svn的方法
find -type d -name '.svn' -exec rm -rfv {} \;
参考 http://blog.csdn.net/zhaoyu7777777/article/details/9445717
252. Fatal : Could not read from remote repository.
git配置使用,已经把公钥发给发给服务端,在终端命令行也是可以正常的pull push,但是在androidstudio push或者pull的时候确出现上述错误
setting –& Version Control –&Git ,In the SSH executable dropdown, choose Native
253. ubuntu获取证书指纹的命令
keytool -list -keystore xxx.keystore
eg:查看debug.keystore
keytool -list -keystore ~/.android/debug.keystore
254. mac 命令行安装软件
通过brew安装,相当于ubuntu中得apt-get
首先安装brew
curl -LsSf
| sudo tar xvz -C/usr/local –strip 1
然后就可以使用brew安装软件了
比如 使用brew安装软件
brew install wget
255.代码混淆时 报如下错误 Error:Execution failed for task ‘:app:proguarxxxRelease’.
java.io.IOException: Can’t read [/libs/xxx.jar] (No such file or directory)
proguard-android.txt文件中不用在指定 -injars, -outjars, or -libraryjars
The Android Gradle plugin already specifies all input and output for you, so you must not specify -injars, -outjars, or -libraryjars.
Moreover, the file proguard-android.txt in the Android SDK specifies all generic Android settings for you, so you shouldn’t specify them again.
Essentially, your file proguard-rules.txt can be empty, except for any application-specific settings to make sure any reflection continues to work
256.Android中如何设置RadioButton在文字的右边,图标在左边
android:button=”@null”这条语句将原来系统的RadioButton图标给隐藏起来。
android:drawableRight=”@android:drawable/btn_radio”这条语句
257.java报“非法字符: \65279 ”错误的解决方法
众所周知,在跨程序的工程中,统一编码是至关重要的,而目前最普遍的则是统一采用“utf8”编码方案。
但是在采用utf8方案的时候,请注意编辑器的自作聪明。
比如editplus。
原因就在于某些编辑器会往utf8文件中添加utf8标记(editplus称其为签名),它会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),它的表示的是 Unicode 标记(BOM)。
258.手机root后 还会出现下述情况Android: adb: copy file to /system (Permission denied)
解决方式,需要remount /system
mount -o remount,rw /system
259.androidstudio 手动添加assets文件 路径在哪
XXX\src\main\assets
260.android双击back退出
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toast = Toast.makeText(getApplicationContext(), "确定退出?", 0);
public void onBackPressed() {
quitToast();
private void quitToast() {
if(null == toast.getView().getParent()){
toast.show();
System.exit(0);
protected void onCreate(Bundle savedInstanceState) {
toast = Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.BOTTOM, 0, ConversionUtil.dip2px(this, 150));
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
if(toast!=null){
toast.cancel();
super.onBackPressed();
this.doubleBackToExitPressedOnce = true;
toast.show();
new Handler().postDelayed(new Runnable() {
public void run() {
doubleBackToExitPressedOnce=false;
261.anroid几个很不错的快捷键
Ctrl+Shift+Alt+T 重构代码 change name
水平分屏显示【需要在keymap中搜索split 设置move right的快捷键】
shift+alt+L
ctrl+shift+v
262.在旧项目中引入android materialdesign 时 出现如下问题
android.view.InflateException: Binary XML file line #17: Error inflating class android.support.design.internal.NavigationMenuView
Caused by: java.lang.reflect.InvocationTargetException
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f0100c5 a=-1}
You need to use a Theme.AppCompat theme (or descendant) with this activity.
解决方法 :使用NavigationMenuView的Activity【一般都是mainActivity】继承自AppCompatActivity,并且修改AndroidManifest.xml中对应activity的theme,使用继承自@style/Theme.AppCompat的主题。
262.How to get key and value of HashMap in java
public class AccessKeyValueOfHashMap {
public static void main(String[] args) {
HashMap&String, String& obHashMap = new HashMap&String, String&();
obHashMap.put("AB", "1");
obHashMap.put("EF", "2");
obHashMap.put("Gh", "3");
obHashMap.put("CD", "4");
Set mapSet = (Set) obHashMap.entrySet();
Iterator mapIterator = mapSet.iterator();
System.out.println("Display the key/value of HashMap.");
while (mapIterator.hasNext()) {
Map.Entry mapEntry = (Map.Entry) mapIterator.next();
String keyValue = (String) mapEntry.getKey();
String value = (String) mapEntry.getValue();
System.out.println("Key : " + keyValue + "= Value : " + value);
263. 设置键盘回车为发送建
android:imeOptions="actionSend"
android:inputType="text"
264. editText 取消背景格式 取消下划线等自带样式
去掉下划线只需把背景设置成为“@null”,
如果想设为其他样式也是设置背景
265. How to build an .so binary for a device with a 64-bit CPU?
latest version of the NDK (right now it's r10e)
Application.mk
APP_ABI := armeabi arm64-v8a armeabi-v7a x86 mips
266. Android NDK for x86_64 has no reference for bcopy and index
You can fix this cleanly with a single line in Application.mk (docs):
APP_CFLAGS += -DSTDC_HEADERS
267.Error:Execution failed for task ‘:xxx:processDebugManifest’. & Manifest merger failed : uses-sdk element cannot have a “tools:node” attribute
This has been updated to reflect the release of API 21, Lollipop. Be sure to download the latest SDK.
In one of my modules I had the following in build.gradle:
dependencies {
compile 'com.android.support:support-v4:+'
Changing this to
dependencies {
compile 'com.android.support:support-v4:21.0.0'
fixed the issue.
268.Error:(1, 1) A problem occurred evaluating project ‘xxx’. & Could not create plugin of type ‘LibraryPlugin’.
修改了build.gradle中的gradle
也要修改gradle-wrapper.properties
build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
gradle-wrapper.properties
distributionUrl=https\:
269.androidstudio
Building Apps with Over 65K Methods
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
dependencies {
compile 'com.android.support:multidex:1.0.0'
270.Caused by: java.lang.NoClassDefFoundError: android.support.v4.util.Pools$SimplePool
271.Caused by: java.lang.NoSuchMethodException:
[class android.content.Context, interface android.util.AttributeSet]
272.java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{423a4c60 position=4 id=-1, oldPos=1, pLpos:1 scrap tmpDetached not recyclable(1) no parent}
273.Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]
I was having this error because i had capital letters in my package name like this
Com.Example.packagename
after i had changed it to something like
com.example.packagename
it was solved
273.解决异常Circular dependencies cannot exist in RelativeLayout
RelativeLayout中存在循环的相关
274.java.lang.ClassNotFoundException
使用MultiDex 后,运行时发现有些crash或者有些类无法调用 报NoClassDefFound error
首先正确使用 google的multipartdex
修改Gradle,导入’com.android.support:multidex:1.0.0’,打开multiDexE
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
dependencies {
compile 'com.android.support:multidex:1.0.0'
修改Application.两种方法:
1) 直接把Application替换成MultiDexApplication
&?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="/apk/res/android"
package="com.example.android.multidex.myapplication"&
&application
android:name="android.support.multidex.MultiDexApplication"&
&/application&
&/manifest&
2) 在原来的Application中修改调用MultiDex.install(this);
public class HelloMultiDexApplication extends Application {
public void onCreate() {
super.onCreate();
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
如果做了上面处理,依旧NoClassDefFound error
通过如下方式处理:
一些在二级Dex加载之前,可能会被调用到的类(比如静态变量的类),需要放在主Dex中.否则会ClassNotFoundError.
通过修改Gradle,可以显式的把一些类放在Main Dex中.
275.Linux 32 Bit Libraries
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1
276.Android Material Design TabLayout.when more than screen width scroll when less than screen width fill
Android TabLayout,当tab总宽度少于一屏时候,扩展为屏幕宽度展示.当tab总宽度大于一屏时,滚动显示
Tab gravity only effects MODE_FIXED.
One possible solution is to set your layout_width to wrap_content and layout_gravity to center_horizontal:
&android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:tabMode="scrollable" /&
If the tabs are smaller than the screen width, the TabLayout itself will also be smaller and it will be centered because of the gravity. If the tabs are bigger than the screen width, the TabLayout will match the screen width and scrolling will activate.
277. android多渠道打包
目前采用的方案是,在AndroidManifest.xml文件中配置
&meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" /&
在app的build.gradle文件中配置
productFlavors {
wandoujia {}
yingyongbao{}
productFlavors.all {
flavor -& flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
这样编译时会生成对应的渠道包apk.现在问题来了,如果有几十个渠道,会生成对应几十个apk包.打包编译一个apk一般需要1分钟左右(和电脑配置有关).那么打包几十个要几十分钟的时间.确实挺费时间的.那么有没有好的方式呐?
当然是有的
我们可以采用如下方案处理.通过文件配置只需要生成一个apk包
此种方法是需要创建文件的。
我们在写完我们的代码之后,在app/src下面,分别创建和main同级目录的文件夹umeng, wandoujia, yingyongbao,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下:
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
&manifest xmlns:android="/apk/res/android"
package="your.package.name"&
&application&
&meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/&
&/application&
&/manifest&
注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。
然后在你的build.gradle的android{}节点里面,添加productFlavors节点,代码如下:
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
productFlavors{
wandoujai {
yingyongbao{
注意这里的flavors的名字要和你的文件夹的名字对应。这样配置之后,构建的就是多渠道的APK了。
278 Tcpdump抓包
有些模拟器比如genymotion自带了tcpdump,如果没有的话,需要下载tcpdump:
把tcpdump push到/data/local下,抓包命令:
279 查看签名
很多开发者服务都需要绑定签名信息,用下面的命令可以查看签名:
keytool -list -v -keystore release.jks
281 一行居中,多行居左的TextView
这个一般用于提示信息对话框,如果文字是一行就居中,多行就居左。
在TextView外套一层wrap_content的ViewGroup即可简单实现:
282 setCompoundDrawablesWithIntrinsicBounds()
网上一大堆setCompoundDrawables()方法无效不显示的问题,然后解决方法是setBounds,需要计算大小…
不用这么麻烦,用setCompoundDrawablesWithIntrinsicBounds()这个方法最简单!
282 更新媒体库文件
以前做ROM的时候经常碰到一些第三方软件(某音乐APP)下载了新文件或删除文件之后,但是媒体库并没有更新,因为这个是需要第三方软件主动触发。
283 Monkey参数
大家都知道,跑monkey的参数设置有一些要注意的地方,比如太快了不行不切实际,太慢了也不行等等,这里给出一个参考:
一边跑monkey,一遍抓log吧。
284 强大的dumpsys
dumpsys可以查看系统服务和状态,非常强大,可通过如下查看所有支持的子命令:
这里列举几个稍微常用的:
媒体库会在手机启动,SD卡插拔的情况下进行全盘扫描,不是实时的而且代价比较大,所以单个文件的刷新很有必要。
注[278-284来源于] 
285. 在布局文件时,在xml可视化文件中看到效果,而又不影响最终展示.可以通过tools来协助
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"&
&ProgressBar
android:id="@+id/progress_loading"
android:layout_width="75dp"
android:layout_height="60dp"/&
android:id="@+id/tv_reload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:src="@drawable/refresh_big"
android:scaleType="centerInside"
android:visibility="gone"
tools:text="点我,重新加载"
tools:visibility="visible"/&
&/RelativeLayout&
加填充xml文件时,TextView是隐藏的,但又想在xml中直观的看到它显示后的整体效果.借助xmlns:tools=”/tools” 完美实现.
286. android studio对于错误拼写/不识别的英文单词,给予波浪提示。
Spellchecker inspection helps locate typos and misspelling in your code, comments and literals, and fix them in one click
选中单词,单击鼠标右键 spelling
Save ‘xxx’ to dictionary..
287. Warning: Use ‘′insteadof′.′forinnerclasses(oruseonlylowercaselettersinpackagenames);replace.with
Package names are written in all lower case to avoid conflict with the names of classes or interfaces.
包名小写,避免和类名或接口名冲突
288. JNI undefined reference to `__android_log_print’
defaultConfig {
moduleName "your_module_name"
ldLibs "log"
更多问题请关注
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:162467次
积分:2140
积分:2140
排名:第18684名
原创:50篇
转载:15篇
评论:31条
文章:10篇
阅读:24692
(1)(1)(2)(2)(2)(2)(8)(1)(5)(4)(1)(1)(1)(3)(1)(6)(12)(1)(5)(3)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 制作app中遇到的问题 的文章

 

随机推荐