我有一个带有Text&的列表视图将文本编辑为列表视图项。用户需要输入与各个文本对应的数值。在列表视图的顶部,我们有搜索框来查找列表视图中的特定项目。在单击搜索框(编辑文本)时,键盘会打开,但在输入第一个字母后,视图会失真(搜索框在屏幕中向上移动),键盘不再接受任何输入。以下是代码段: 活动xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
tools:context="com.belinnov.product.tcbroms.activity.StockProductsActivity">
<ProgressBar
android:id="@+id/stock_layout_progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible" />
<RelativeLayout
android:id="@+id/stock_product_search_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/search_bar_height">
<com.xxx.helper.EditTextBackEvent
android:id="@+id/stock_product_search"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/app_margin_small"
android:background="@drawable/editext_background"
android:textColor="@android:color/black"
android:imeOptions="actionSearch"
android:textSize="@dimen/app_font_medium"
android:focusable="true"
android:focusableInTouchMode="true"
android:paddingLeft="@dimen/app_padding_large">
</com.xxx.helper.EditTextBackEvent>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/searchsm"
android:layout_marginTop="@dimen/app_margin_regular"
android:layout_marginLeft="@dimen/app_margin_regular"/>
</RelativeLayout>
<ListView
android:id="@+id/stock_product_lv"
android:layout_below="@id/stock_product_search_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/grey"
android:descendantFocusability="beforeDescendants"
android:dividerHeight="@dimen/listview_divider_height">
</ListView>
</RelativeLayout>
列表视图项xml:
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/stock_product_list_item"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:orientation="horizontal">
<LinearLayout
android:layout_below="@+id/stock_pr_id"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".70"
android:layout_marginTop="@dimen/app_padding_small"
android:paddingBottom="@dimen/app_padding_small"
android:orientation="vertical">
<TextView
android:id="@+id/stock_pr_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/app_font_medium"
android:textColor="@android:color/black"
android:text="aa"/>
<TextView
android:id="@+id/stock_product_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/hello_world"
android:textColor="@android:color/black"
android:textStyle="normal"
android:textSize="@dimen/app_font_medium"/>
</LinearLayout>
<EditText
android:id="@+id/stock_product_qty_edt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".30"
android:inputType="numberDecimal"
android:padding="@dimen/app_margin_regular"
android:cursorVisible="true"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/app_padding_small"
android:paddingBottom="@dimen/app_padding_small"
android:background="@drawable/editext_background">
<requestFocus/>
</EditText>
</LinearLayout>
我们为列表视图编辑文本指定了android:inputType="numberDecimal"
。由于这一点,在点击编辑文本时,普通键盘打开几分之一秒,然后出现数字键盘。搜索框中也没有任何关键字。更改了代码以请求关注搜索框,如下所示:
searchEditText = (EditTextBackEvent) findViewById(R.id.stock_product_search);
searchEditText.setFocusable(false);
searchEditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
searchEditText.setFocusableInTouchMode(true);
return false;
}
});
通过上述更改,常规软键盘会出现在搜索框中。但是,只要输入第一个字母,结果就会被过滤,整个视图会变形(向上移动,隐藏搜索框)。在按下时,视图显示为常态,然后在另一个字母输入上显示相同的行为。尝试了很多其他的东西,如android:descendantFocusability
,但它们似乎都没有起作用。现在苦苦挣扎了一段时间。请告知我是否遗漏了什么。