Search code examples
androidactionbarsherlockandroid-edittext

EditText does not accept digits as input


The EditText view with id="price" has an inputType="numberDecimal" that does not accept any digits but will only accept one decimal point. The other EditText view with id="store" has no inputType set but has two issues. If the view has no input then entering a digit from the keyboard doesn't do anything. The only way to have a digit be accepted is if it immediately follows either a letter or another digit. I am using the default Android keyboard. The layout is being inflated in the onCreateView() method of a subclass of SherlockFragment. Could this be an issue with the EditText view behavior inside a SherlockFragment? I have a similar layout that is used to inflate a subclass of 'SherlockFragmentActivity', and those EditText views behave normally. Does anyone know what could be causing this issue?

<?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:orientation="vertical">
    <TextView 
        style="@style/ProductTextViewTitle"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:padding="10dp" 
        android:text="Product Tile" />
    <TableRow android:layout_width="fill_parent" 
              android:layout_height="50dp"     
              android:gravity="center_vertical"
              android:padding="5dp">
        <TextView 
              style="@style/ApolloStyleBold"
              android:layout_width="0dp" 
              android:layout_height="match_parent" 
              android:layout_weight="0.4"
              android:gravity="center_vertical" 
              android:paddingLeft="5dp" 
              android:text="@string/price"/>
        <EditText android:id="@+id/price" 
                  android:layout_width="0dp" 
                  android:layout_height="match_parent"
                  android:layout_weight="0.6" 
                  android:background="@null" 
                  android:hint="@string/price_italic_hint"
                  android:inputType="numberDecimal"/>
    </TableRow>
    <TableRow android:layout_width="fill_parent" 
              android:layout_height="50dp"    
              android:gravity="center_vertical"
              android:padding="5dp">
        <TextView   
            style="@style/ApolloStyleBold"
            android:layout_width="0dp" 
            android:layout_height="match_parent" 
            android:layout_weight="0.4"
            android:gravity="center_vertical" 
            android:paddingLeft="5dp" 
            android:text="@string/store_name"/>
        <EditText android:id="@+id/store" 
                  android:layout_width="0dp" 
                  android:layout_height="match_parent"
                  android:layout_weight="0.6" 
                  android:background="@null" 
                  android:hint="@string/stores_hint"
        />
    </TableRow>
</LinearLayout>

Update

When I tested this on Android v4.3, it has the messed up (not accepting digits as input) behavior. However, I tested it on Android v4.1.2, and it accepts digits as input. Is there something different about these two versions as far as EditText behavior?


Solution

  • It turns out the issue wasn't with the android:inputType that was set, but with a ViewGroup higher up in the view hierarchy. The layout which is used to inflate the SherlockFragment was a child in a more complex layout.

    A few parents up the view hierarchy there was a subclass of the FrameLayout ViewGroup called DragLayer. The DragLayer class implemented an Interface called DragController.DragListener which has a method dispatchKeyEvent(KeyEvent event). This method in DragLayer uses the @Override notation however did not call super.dispatchKeyEvent(event). After adding this line of code, then the event of clicking a digit on the keyboard did not get consumed and all works now.