ОК, Кажется, мы решили решить эту проблему. (спасибо моему товарищу по команде Клаффоло)
Я честно не мог понять, как решить мою проблему, поэтому мы предпочли создать нашу личную панель поиска, вместо того, чтобы использовать Google.
Это результат, которого мы достигли: Search Bar (я заменил наш логотип этим домашним значком, потому что мы предпочитаем скрывать наш логотип.), Очень похожий на тот, который я хотел, мм?
Это мой activity_main.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="?attr/colorPrimary"
android:layout_alignParentStart="true"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:paddingEnd="16dp">
<ImageView
android:id="@+id/search_bar_hint_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_search"/>
<EditText
android:id="@+id/search_bar_edit_text"
android:layout_width="0dp"
android:hint="@string/search_hint"
android:textColorHint="@color/LightYellow"
android:backgroundTint="@color/DarkYellow"
android:background="@color/DarkYellow"
android:inputType="textCapWords"
android:layout_weight="1"
android:layout_height="32dp" />
<ImageButton
android:id="@+id/search_bar_voice_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:background="@drawable/ic_mic" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
<ImageView
android:id="@+id/imageview_logo"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_below="@id/my_toolbar"
android:src="@drawable/ic_home"
android:background="@color/MainYellow"
/>
</RelativeLayout>
Так как вы можете видеть, что это структура состоит из трех элементов: EditText, который обрабатывает входные данные, ImageView, которая представлена с помощью этого значка объектива перед текстовым полем поиска поиска и ImageButton, кнопка mic_icon, которая обрабатывает события voice_speech. Все они являются местами в linearLayout, а в панели Toolbar мне пришлось разместить поле layout_weight = 1
в EditText, чтобы достичь результата, который вы можете увидеть на картинке.
Во всяком случае, вот как мы обработаны наш код:
MainActivity.Java:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//SETUP TOOLBAR
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
voice_search_button = (ImageButton)findViewById(R.id.search_bar_voice_icon);
editText = (EditText) findViewById(R.id.search_bar_edit_text);
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragmentManager.beginTransaction().replace(R.id.fragment_container, new SearchResultsFragment()).commit();
}
});
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
fragmentManager.beginTransaction().replace(R.id.fragment_container, new SearchResultsFragment()).commit();
}
}
});
Для обработки voice_speech событий, добавьте следующие строки в MainActivity.java под OnCreate перекрытого метода:
//Voice Search Listener
voice_search_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
promptSpeechInput();
}
});
И переопределить эти два метода:
/**
* Showing google speech input dialog
* */
private void promptSpeechInput() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
getString(R.string.speech_prompt));
try {
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
} catch (ActivityNotFoundException a) {
Toast.makeText(getApplicationContext(),
getString(R.string.speech_not_supported),
Toast.LENGTH_SHORT).show();
}
}
/**
* Receiving speech input
* */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_SPEECH_INPUT: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> result = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
editText.setText(result.get(0));
//TODO AVVIARE ATTIVITA' CON TESTO RESULT.GET(0)
}
break;
}
}
}
В конце концов, мы по-прежнему имеем дело с функциями instantSearch и фильтрации благодаря этому парню, который ответил здесь: How to filter a RecyclerView with a SearchView
Надеюсь, это помогло кому-то, в конце концов, я обновлю свой ответ.
Имейте славный день.