禁用Android浏览器的输入叠加层?

时间:2012-02-23 23:27:12

标签: android html css jquery-mobile android-browser

我有一个带有一些文字输入的网页。 Android浏览器(至少在我现在得到的Android 2.3.4上)似乎覆盖了自己对焦点页面上输入的控制。

问题是叠加的控件是一个白色矩形,看起来很丑。有没有办法禁用它,或以某种方式设置它?

更新

以下是Android模拟器的示例:

enter image description here

圆角和背景都会丢失。在实际设备上,我甚至看不到控件周围的边框。

我应该提一下,我正在使用jQuery Mobile。我的测试设备是HTC Evo 4G。

相关问题:

Input has different style on focus

Input-Elements in WebViews always have the same style if highlighted on HTC Devices

8 个答案:

答案 0 :(得分:19)

最后,我解决了Android 2.3设备的这个问题。

无法真正移除叠加层,但可以将叠加层移到视口外。

叠加层尝试将自身定位到与输入字段相同的位置。 它复制您使用

指定的宽度和位置偏移
position:relative

top:-10000px

但叠加层不会复制通过

分配的位置偏移
-webkit-transform: translate3d()

这会导致像iScroll这样的JS库出现几个问题。

但这也有助于我们隐藏叠加层:

input[type="password"], input[type="text"]{
  position:relative;
  top:-10000px;
  -webkit-transform: translate3d(0, 10000px, 0);
}

将输入字段放在视口外部。叠加位置旁边。现在你使用translate3d()将它移动到旧位置。

我们已在移动网络框架中使用此解决方案" qooxdoo Mobile": http://demo.qooxdoo.org/devel/mobileshowcase/index.html#%2Fform

答案 1 :(得分:14)

以下代码将删除点击突出显示 - [Android 4.0.3]

input{
   -webkit-user-modify: read-write-plaintext-only;
   -webkit-tap-highlight-color:#3072af;
}

答案 2 :(得分:13)

不确定这是一个有效的解决方案和答案,但我的输入在评论出这些后开始在Android上播放,这对我的Android(HTC2.3)文本输入造成了严重破坏并选择了

/* really bad */
-webkit-backface-visibility: hidden; 

/* your normal bad */
-webkit-transform: rotateY(0deg); 
-moz-transform: rotateY(0deg); 
transform: rotateY(0deg);

如果你想设置默认输入的样式,我正在使用它们:

/* native placeholder styling */    
::-webkit-input-placeholder {
    color:#555555;  
    }
:-moz-placeholder {
    color:#555555;  
    }   
.inField label {
    color:#555555;
    cursor: text;   
} 

在评论出第一个webkits之后,Android正在为我工​​作。我也压倒了很多其他的东西。

另请参阅以下屏幕截图:

我对输入所做的是创建一个列表视图,将所有输入放入列表项并删除所有输入-JQM-CSS。这应该给你一个透明的输入坐在listview项目的顶部,我认为这看起来非常好。您还可以为输入添加标签,我的示例设置为使用inField标签插件,因此您已经拥有了所有这些类。

截图来自我的Android HTC 2.3.5并显示输入类型=“搜索”。这是一个listview搜索过滤器,我删除了大多数JQM-css。我已将其从listview中删除,将其放入我的表单列表中,添加标签(无法查看是否处于活动状态)并删除所有CSS,包括图标。

以下是我如何进行列表表单的示例:

 <ul data-role="listview" data-inset="true" class="inputList">
    <li data-role="fieldcontain" data-icon="false" class="inField ui-btn ui-corner-top" data-theme="c">
        <div class="ui-btn-inner" aria-hidden="true"><div class="ui-btn-text">
        <label for="item">item</label>
        <input type="text" name="item" id="item" />
        </div></div>
     </li>
     <li data-role="fieldcontain" data-icon="false" class="inField ui-btn ui-corner-bottom" data-theme="c">
        <div class="ui-btn-inner" aria-hidden="true"><div class="ui-btn-text">
        <label for="item2">item2</label>
        <input type="text" name="item2" id="item2" />
        </div></div>
     </li>
  </ul> 

CSS:

.inputList li div.ui-btn-inner {
    background: none;
    border-bottom-width: 0px;
    border-left-width: 0px;
    border-right-width: 0px;
    }
 .inputList label {
    margin: 3px 0 0 !important;
    }
 // styling of text inputs! 
 .inputList input.ui-input-text, .inputList textarea.ui-input-text {
    width: 93%; 
    margin-left: 1%;
    padding: 0.6em 0;   
    text-indent: 80px; /* hard-coded - doesn't work on Android */
    border-width: 0px;
    background: transparent;    
    -moz-box-shadow: none; 
    -webkit-box-shadow: none; 
    box-shadow: none;   
    -moz-border-radius:0px; 
    -webkit-border-radius: 0px; 
    border-radius: 0px;
    }
.inputList .ui-li-divider:not(.input-divider), .inputList .ui-li-static, .inputList .ui-li-has-alt, .inputList .ui-link-inherit, .inputList .ui-btn-icon-notext .ui-btn-inner {
    padding: 0px !important;    
    }
// labels, from inField label plugin, but not active
.inField { 
    position:relative 
    }
.inField label { 
    line-height: 2.25em;
    vertical-align: middle;
    position:absolute; 
    left:8pt;
    width: inherit !important;  
    }

我希望这都是CSS。如果你试图设置它并且它看起来很糟糕,请告诉我。

在我的HTC 2.3.4上工作这样看起来非常好我的CSS仍然需要一些抛光。我需要减小输入宽度并对齐:居中,因此下面列表项的边框保持可见。

除此之外,这对于糟糕的Android输入来说是个不错的解决方案。只需删除所有JQM-CSS并将listview-li放在后面。

Android listview search filter input

答案 3 :(得分:6)

这是我的代码:

input {
    -webkit-user-modify: read-write-plaintext-only;
    -webkit-tap-highlight-color: rgba(255,255,255,0);
}

答案 4 :(得分:4)

我只是在这里猜测,你可能已经尝试了,但是

-webkit-appearance: none;

可以做到这一点。我甚至没有Android设备,但在iphone上排除了大多数与输入相关的样式问题,因为它完全消除了默认浏览器应用的样式。无论如何值得一试!

答案 5 :(得分:3)

-webkit-user-modify: read-write-plaintext-only;

-webkit抽头高亮颜色:RGBA(0,0,0,0); outline-style:none;

这在Android 4.0中运行良好但是当你使用这个代码进行数字输入字段不支持只读读写纯文本的bcoz时,我遇到了这个问题,请有人建议。

答案 6 :(得分:1)

@czuendorf,5月13日13:53: 也为我工作(也是Android 4.0)。

但是......如果您使用type =“number”的输入,那么当您输入字段时,数字键盘不再弹出,而是显示常规键盘。

如果删除-webkit-user-modify,则会再次显示右键盘,但输入元素在编辑时会显示边框。 在我的情况下,输入叠加层搞乱了布局(向下和向右移动了一些内容),但是这种新的css代码不再发生这种情况。

答案 7 :(得分:1)

我确认了czuendorf补丁的macnerd分析。从一个Android版本到另一个版本,这些行为差别很大。我在一个真正的Htc设备上用android 4.0.3进行了测试,轮廓消失了(太棒了!)但是它打开了一些严重的键盘问题(我看到单个按键没有显示在字段中,以及其他奇怪的行为......) 。在模拟器中不会出现键盘问题。我没有找到真正的设备的任何解决方案。这是一个耻辱!