安卓 - 手动膨胀的列表视图行上的自定义键盘未显示



美好的一天。

我有一个安卓应用程序。在我的应用程序中,我有一个自定义列表视图,其中包含 5 列是文本视图。用户可以单击行,一旦他这样做,行布局将更改,将最后 2 个文本视图更改为编辑文本。然后,我将新的 EditTexts 注册到从此示例中提取的自定义键盘上 - 请注意,我针对自定义键盘类以及如何使其在主布局中工作,对他的示例进行了功能性复制粘贴。但是,当我单击行中的编辑文本时,我的自定义键盘根本没有显示。

我有一个这样的全局变量:

CustomKeyboard mCustomKeyboard;

在活动中的onCreate()方法中,我确实:

mCustomKeyboard= new CustomKeyboard(this, R.id.keyboardview, R.xml.custom_keyboard);

这是我的布局,我在布局底部有键盘视图:

<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:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".SearchResult" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    <!-- A lot of views go here, enclosed in my linear layout -->
    </LinearLayout>
    <android.inputmethodservice.KeyboardView
        android:id="@+id/keyboardview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:visibility="gone" />
</RelativeLayout>

下面是更改布局的代码。我所做的是从旧布局中获取行值,获取新布局search_result_inflate,然后使用我获得的值设置新布局的文本。请注意充气布局后的mCustomKeyboard.registerEditText(R.id.qtyInputSearchResult);线:

private void changeLayout(final View view){
    //get views from old layout
    TextView textViewQuantity = (TextView)view.findViewById(R.id.qtyInput);
    TextView textViewDiscountReq = (TextView)view.findViewById(R.id.discInput);
    TextView textViewName = (TextView)view.findViewById(R.id.dialogItemName);
    TextView textViewPrice = (TextView)view.findViewById(R.id.price);
    TextView textViewDiscount = (TextView)view.findViewById(R.id.discount);
    //store values in strings
    String itemName = textViewName.getText().toString();
    String itemPrice = textViewPrice.getText().toString();
    String itemDiscount = textViewDiscount.getText().toString();
    String itemQty = textViewQuantity.getText().toString();
    String itemDisc = textViewDiscountReq.getText().toString();
    //set the view to gone
    textViewQuantity.setVisibility(View.GONE);
    textViewDiscountReq.setVisibility(View.GONE);
    textViewName.setVisibility(View.GONE);
    textViewPrice.setVisibility(View.GONE);
    textViewDiscount.setVisibility(View.GONE);
    //get the old layout
    LinearLayout ll_inflate = (LinearLayout)view.findViewById(R.id.search_result_layout);
    //get the inflate/new view
    View child = getLayoutInflater().inflate(R.layout.search_result_inflate, null);
    //get the views in the new view, populate them
    TextView newName = (TextView)child.findViewById(R.id.dialogItemName);
    newName.setText(itemName);
    TextView newDiscount = (TextView)child.findViewById(R.id.discount);
    newDiscount.setText(itemDiscount);
    TextView newPrice = (TextView)child.findViewById(R.id.price);
    newPrice.setText(itemPrice);
    EditText qtyInput = (EditText)child.findViewById(R.id.qtyInputSearchResult);
    qtyInput.setText(itemQty);
    EditText discInput = (EditText)child.findViewById(R.id.discInputSearchResult);
    discInput.setText(itemDisc);
    //show new layout
    ll_inflate.removeAllViews();
    ll_inflate.removeAllViewsInLayout();
    ll_inflate.addView(child);
    mCustomKeyboard.registerEditText(R.id.qtyInputSearchResult); 
}

这是我search_result_inflate.xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_result_inflate"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip"
    android:weightSum="1" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="horizontal"
        android:padding="1dip" >
        <TextView
            android:id="@+id/dialogItemName"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.54"
            android:gravity="center"
            android:text="Item Name"
            android:textSize="23sp" />
        <TextView
            android:id="@+id/price"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.14"
            android:gravity="center"
            android:text="Price"
            android:textSize="23sp" />
        <TextView
            android:id="@+id/discount"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.10"
            android:gravity="center"
            android:text="Discount"
            android:textSize="23sp" />
        <EditText
            android:id="@+id/qtyInputSearchResult"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.14"
            android:background="@layout/edittext_selector"
            android:gravity="center"
            android:hint="qtyInput"
            android:textColorHighlight="@color/white_opaque"
            android:textSize="23sp" >
        </EditText>
        <EditText
            android:id="@+id/discInputSearchResult"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.11"
            android:background="@layout/edittext_selector"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:gravity="center"
            android:hint="discInput"
            android:textColorHighlight="@color/white_opaque"
            android:textSize="23sp" />
    </LinearLayout>
</LinearLayout>

如您所见,我有 2 个 editTexts,并且我注册了qtyInputSearchResult自定义键盘类。但是,自定义键盘不显示。

我还尝试在另一个活动中的 editText 上使用自定义键盘类,它工作得很好。我在这里错过了什么吗?我很困惑为什么自定义键盘无法正确显示。

非常感谢任何帮助,谢谢。

知道了,我将键盘布局放在search_result_inflate.xml中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_result_inflate"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip"
    android:weightSum="1" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="horizontal"
        android:padding="1dip" >
        <!-- a lot of components here -->
    </LinearLayout>
    <android.inputmethodservice.KeyboardView
        android:id="@+id/keyboardview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:visibility="gone" />
</RelativeLayout>

最新更新