我遇到一个奇怪的问题,某些手机与谷歌/三星的键盘不同,我想知道是否有人遇到并有解决方案。
我遇到的问题是:如果我使用股票谷歌或三星galaxy的键盘,我的布局(下面)表现良好,是活泼的,没有任何滞后。我在许多设备(Galaxy S3,Galaxy Note,Galaxy S5,Nexus 5,6和7)上进行了测试。另一方面,如果我使用默认键盘在HTC或LG手机上运行此功能,则当用户输入文本时,布局会出现明显的延迟。
经过大量的调试和性能测量后,我发现问题出在建议栏上。对于默认的Samsung / Google键盘,建议栏始终存在(如下所示),但对于HTC / LG手机,只有在用户输入导致重新渲染布局的内容后,建议栏才会显示。当用户开始键入时,这种重新渲染反过来会导致明显的延迟。我已经尝试了很多这样的解决方案,例如在LinearLayout中包装我的布局并修复它们的宽度(通过指定权重)和修复其他控件的高度等(在下面的布局文件中都可见)以便删除测量布局测量的负担,但没有一个消除这种滞后。
我的问题是,我该如何解决这个问题?是否有办法强制所有键盘始终显示此建议栏,而不管用户输入的文本是否可能存在或不存在?我强迫用户选择一个特定的键盘,或者他们面临相当大的延迟,这不是一个真正的选择。
我的布局是一个简单的布局,带有水平滚动视图和两个编辑文本:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/editText_topic"
android:textSize="@dimen/txt_description_font_size" />
<HorizontalScrollView
android:id="@+id/layout_topics"
android:layout_width="match_parent"
android:layout_height="@dimen/gallery_height"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:layout_marginTop="2dp"
android:background="@drawable/rectangle_error_background"
android:paddingLeft="6dp"
android:paddingRight="6dp" >
<LinearLayout
android:id="@+id/gallery_topic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="horizontal" />
</HorizontalScrollView>
<RelativeLayout
android:id="@+id/layout_title_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="8dp" >
<TextView
android:id="@+id/txt_title_length"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textSize="@dimen/length_text_font_size" >
</TextView>
</RelativeLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/txt_title"
android:layout_width="0dp"
android:layout_height="@dimen/txt_input_height"
android:layout_gravity="fill_horizontal|fill_vertical"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:hint="@string/editText_title_hint"
android:inputType="textFilter|textCapSentences" >
<requestFocus
android:layout_width="match_parent"
android:layout_height="match_parent" />
</EditText>
</LinearLayout>
<RelativeLayout
android:id="@+id/layout_description_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="8dp" >
<TextView
android:id="@+id/txt_description_length"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textSize="@dimen/length_text_font_size" >
</TextView>
</RelativeLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/txt_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:gravity="top"
android:hint="@string/editText_description_hint"
android:inputType="textAutoCorrect|textCapSentences|textMultiLine"
android:scrollbars="vertical" >
</EditText>
</LinearLayout>
</LinearLayout>
清单中的活动是:
<activity
android:name="MyActivity"
android:icon="@drawable/whatever"
android:label="@string/empty"
android:parentActivityName="ParentActivity"
android:theme="@style/MyTheme"
android:windowSoftInputMode="adjustResize|stateVisible" >
</activity>
更新 我注意到WhatsApp总是在键盘上显示这个建议栏,即使EditText的输入为空(用户尚未输入值)。有谁知道这是怎么做的?
非常感谢提前。
答案 0 :(得分:1)
没有办法强迫它。这是必须在键盘侧完成的事情,因为键盘决定何时显示候选视图。事实上,这个性能问题是我工作的几个键盘上的一个原因,我们没有使用Android内置的candidateView功能并自行推出。
答案 1 :(得分:0)
以下设置将隐藏建议栏。但是,我不知道强制它显示的设置。
android:inputType="textNoSuggestions"
android:inputType="textFilter"