2014-09-26 4 views
1

Я разрабатываю приложение для онлайн-магазина. Одной из основных особенностей является функция поиска. Поскольку мне нужно поддерживать API 8 и выше вместо SearchView, я использовал EditText, как показано ниже, для реализации вида поиска.Как обращаться с нажатой клавишей с нажатой клавишей

   <EditText android:id="@+id/search_edit" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:layout_centerVertical="true" 
         android:layout_marginLeft="10dp" 
         android:layout_marginRight="10dp" 
         android:layout_toLeftOf="@+id/search_button" 
         android:background="@color/white" 
         android:ems="20" 
         android:imeOptions="actionDone" 
         android:maxLines="1" 
         android:textColor="@color/black" 
         android:textColorHint="@color/ebuy_color_second_strip" 
         android:textSize="18sp" > 
        </EditText> 

Теперь я хочу, чтобы обрабатывать клавишу ввода на клавиатуре, таким образом, чем когда пользователь нажимает кнопку ввода, начинается поиск активности. Код, который я использовал, как показано ниже:

search = (EditText) findViewById(R.id.search_edit); 
     search.setOnKeyListener(new OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if ((event.getAction() == KeyEvent.ACTION_DOWN) 
         && (keyCode == KeyEvent.KEYCODE_ENTER)) { 

        String query_text = search.getText().toString().trim(); 

        try { 
         query_text = URLEncoder.encode(query_text, "utf-8"); 
        } catch (UnsupportedEncodingException e) { 

        } 
        String full_query = query_text; 

        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(search.getWindowToken(), 0); 

         Intent bussiness = new Intent(EbuyHomeScreen.this, 
           EbuySearchActivity.class); 
         Bundle basket_buss_category = new Bundle(); 

         basket_buss_category.putString(EbuyUtils.TAG_CATEGORY_CODE, full_query); 

         bussiness.putExtras(basket_buss_category); 

         startActivity(bussiness); 

        return true; 
       } 
       return false; 
      } 

     }); 

Этот способ отлично работает хорошо с андроид клавиатуры и некоторых других клавиатур, но когда я использую салфетки или быстрые клавиатуры и другие персонализированных клавиатур, которые загружаются из Google Play Маркета это не работает, и вместо того, чтобы начинать прыжки в новой строке. Может кто-нибудь помочь мне решить эту проблему.

ответ

0

Попробуйте setOnEditorActionListener на вашем edittext.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
@Override 
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
     //your code here 
     return true; 
    } 
    return false; 
} 
}); 

Вы должны установить imeAction в файле XML вашего EditText в:

<EditText 
    android:id="@+id/editTextUsername" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:hint="USERNAME" 
    android:inputType="text" 
    android:imeOptions="actionSearch" > 

    <requestFocus /> 
</EditText> 
+0

Как насчет XML-части, я должен изменить там? – Xhulio

+0

@Xhulio вам не нужно менять свой xml –

+0

@ Аргумент не работает, я также изменил с IME_ACTION_SEARCH на IME_ACTION_DONE, но все же он не работает. – Xhulio

Смежные вопросы