我有一个edittext,当我单击它时,我得到了所需的数字软键盘。但是,当我在edittext之外单击时,我得到了常规键盘,但是当用户在edittext之外单击时,我需要隐藏键盘。键盘也应该在滚动上消失,而不仅仅是在OnClick上消失。

public View getView(int position, View convertView, ViewGroup parent) {
            StoreSkuInfo storeSkuInfo = StoreSkuInfoList.get(position);

            View row = convertView;
            String status="";
            StoreSkuHolder holder = null;

            if (row ==null) {

                LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                row = mInflater.inflate(R.layout.pip_pickupinstore_listcell, null);

                holder = new StoreSkuHolder();

                            holder.qtyText = (EditText)row.findViewById(R.id.pip_qty_et);
                holder.qtyLL = (LinearLayout)row.findViewById(R.id.qty_LL);
                holder.pipQuantityStatus = (TextView) row.findViewById(R.id.quantity_status);
                holder.relativeLayoutStoreInfo = (RelativeLayout) row.findViewById(R.id.RelativeLayoutStoreInfo);
                holder.relativeLayoutAisleBay = (RelativeLayout) row.findViewById(R.id.RelativeLayoutAisleBay);


                row.setTag(holder);

            }else{
                holder = (StoreSkuHolder)row.getTag();
            }
}


众所周知,多次调用此getView方法,因此,在单击edittext时,将以下代码放入getView方法中会使键盘每秒上下移动。

holder.qtyText.setOnFocusChangeListener(new OnFocusChangeListener() {

                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    // TODO Auto-generated method stub
                    if(hasFocus) {
                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
                    }
                    if(!hasFocus) {
                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
//                      imm.hideSoftInputFromWindow(v.getWindowToken(), 1);
                    }
                }
            });


如何解决?

编辑:
如下尝试Shruti的答案。
我将以下代码放在父类中:

public static void hideSoftKeyboard(Activity activity)
    {

        if(activity!= null && activity.getCurrentFocus() != null && activity.getCurrentFocus().getWindowToken() != null)
        {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }


然后在OnCreate中,我将:

findViewById(android.R.id.content).getRootView().setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d(TAG, "In setOnTouchListener of root");
                hideSoftKeyboard(PIPActivity.this);
                return false;
            }
        });


但是代码甚至都没有进入此TouchListener中。

编辑2
我尝试了Shashank Agarwal的答案。但是他的答案是特定于布局的。如果用户单击其他任何地方,我需要键盘消失。下面是要说明的图片。



下面是EDITTEXT的XML布局。我从中删除了一些行,以尝试保持其正确性。讨论中的EditText位于此底部:android:id =“ @ + id / pip_qty_et”

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/shiptostore_cell"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dip"
    android:background="@color/ce"
    android:onClick="onClick"
    android:clickable="true"
    android:focusable="true"
    android:orientation="horizontal" >

    <RelativeLayout
        android:id="@+id/pip_store_cell_rl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:layout_marginBottom="20dip"
        android:gravity="center"
        android:paddingBottom="5dp"
        android:paddingRight="5dp"
        android:paddingTop="5dp" >

       <com.HDTextView
            android:id="@+id/pickupinstore_availtoday"
            style="@style/Normal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dip"
            android:layout_below="@+id/pickupinstore_milesaway"
            android:text="Available for Pick Up TODAY"
            android:textColor="@color/C7" />

        <RelativeLayout
            android:id="@+id/RelativeLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/pickupinstore_availtoday"
            android:layout_marginTop="15dip" >

            <com.HDTextView
                android:id="@+id/seperator"
                android:layout_width="0dip"
                android:layout_height="0dip"
                android:layout_centerInParent="true" />

            <RelativeLayout
                android:id="@+id/RelativeLayoutAisleBay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="3dp"
                android:layout_toLeftOf="@id/seperator"
                android:visibility="gone" >

                <com.HDTextView
                    android:id="@+id/pickupinstore_bin"
                    style="@style/Small"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="8dip"
                    android:layout_toRightOf="@+id/pickupinstore_aisle"
                    android:maxWidth="70dp"
                    android:singleLine="true"
                    android:text="Bay [x]"
                    android:textColor="@color/RGB51" />

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="2dip"
                android:layout_toRightOf="@id/storeLocationButton"
                android:gravity="center" >

                <com.HDTextView
                    android:id="@+id/quantity_status"
                    style="@style/SmallBold"
                    android:layout_width="wrap_content"
                    android:layout_height="20dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginRight="5dp"
                    singleLine="true"
                    android:background="@drawable/bevelededge_mob_lightest_green"
                    android:gravity="center"
                    android:minWidth="20dp"
                    android:paddingLeft="2dp"
                    android:paddingRight="2dp"
                    android:text="99"
                    android:textColor="@color/White"
                    android:textSize="12dip" />

            </RelativeLayout>
        </RelativeLayout>

        <LinearLayout
            android:id="@+id/qty_LL"
            android:layout_width="50dip"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:orientation="vertical"
            android:clickable="true"
            android:focusable="true"
            android:layout_alignParentRight="true">

                <com.HDTextView
                    style="@style/Small"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:singleLine="true"
                    android:text="QTY"
                    android:textColor="@color/Grey" />

                <EditText
                    android:id="@+id/pip_qty_et"
                    android:layout_width="45dip"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:layout_alignParentRight="true"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:imeOptions="actionDone"
                    android:gravity="center"
                    android:hint="5"
                    android:onClick="test"
                    android:inputType="number"
                    android:maxLength="3" />

        </LinearLayout>"


        <RelativeLayout
            android:id="@+id/RelativeLayoutStoreInfo"
            android:layout_width="150dip"
            android:layout_height="wrap_content"
            android:layout_above="@+id/RelativeLayout"
            android:layout_alignLeft="@+id/pickupinstore_storename"
            android:layout_alignParentTop="true">
        </RelativeLayout>
    </RelativeLayout>

</LinearLayout>

最佳答案

将此代码放在onCreate之外

public void onClick(View view) {
        InputMethodManager imm = (InputMethodManager) view.getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }


在布局xml文件中,将此行放在父布局上,因此可以点击

android:onClick="onClick"

关于java - 在ArrayAdapter中执行edittext之外的操作后,如何在android中隐藏软键盘?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19451395/

10-09 15:41
查看更多