TV'de bir medya uygulaması kullanırken kullanıcıların aklında genellikle belirli bir içerik vardır. Uygulamanız büyük bir içerik kataloğuna sahip olmak; belirli bir içeriğe göz atmak, aradıklarını bulmasını kolaylaştırır. Arama arayüzü, kullanıcılarınızın daha hızlı olmasını istiyorlar.
androidx.leanback kitaplığı, standart bir arama arayüzünü etkinleştirmek için bir dizi sınıf sağlar TV'deki diğer arama işlevleriyle tutarlı olan ve ses girişi'ne dokunun.
Bu kılavuzda, Leanback desteğini kullanarak uygulamanızda nasıl arama arayüzü sağlayacağınız açıklanmaktadır. inceleyebilirsiniz.
Arama işlemi ekleyin
Bir medya için BrowseFragment
sınıfını kullandığınızda
bir arama arayüzünü kullanıcılarınızın standart bir parçası olarak etkinleştirebilirsiniz.
kullanır. Arama arayüzü, BrowseFragment
üzerinde View.OnClickListener
öğesini ayarladığınızda düzende görünen bir simgedir
nesnesini tanımlayın. Aşağıdaki örnek kod bu tekniği göstermektedir.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.browse_activity) browseFragment = fragmentManager.findFragmentById(R.id.browse_fragment) as BrowseFragment browseFragment.setOnSearchClickedListener { view -> val intent = Intent(this@BrowseActivity, SearchActivity::class.java) startActivity(intent) } browseFragment.setAdapter(buildAdapter()) }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.browse_activity); browseFragment = (BrowseFragment) getFragmentManager().findFragmentById(R.id.browse_fragment); ... browseFragment.setOnSearchClickedListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(BrowseActivity.this, SearchActivity.class); startActivity(intent); } }); browseFragment.setAdapter(buildAdapter()); }
Not: Arama simgesinin rengini
setSearchAffordanceColor(int)
yöntemidir.
Arama girişi ve sonuç ekleyin
Bir kullanıcı arama simgesini seçtiğinde, sistem
tanımlanmış amaçtır. Arama etkinliğiniz için bir
SearchFragment
Bu parça, SearchFragment.SearchResultProvider
öğesini de uygulamalıdır
arayüzünü kullanın.
Aşağıdaki kod örneğinde, SearchFragment
sınıfının nasıl genişletileceği gösterilmektedir
bir arama arayüzü ve sonuçlar sağlar:
Kotlin
class MySearchFragment : SearchFragment(), SearchFragment.SearchResultProvider { private val rowsAdapter = ArrayObjectAdapter(ListRowPresenter()) private val handler = Handler() private val delayedLoad = SearchRunnable() val resultsAdapter: ObjectAdapter get() { return rowsAdapter } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setSearchResultProvider(this) setOnItemClickedListener(getDefaultItemClickedListener()) } fun onQueryTextChange(newQuery: String): Boolean { rowsAdapter.clear() if (!TextUtils.isEmpty(newQuery)) { delayedLoad.setSearchQuery(newQuery) handler.removeCallbacks(delayedLoad) handler.postDelayed(delayedLoad, SEARCH_DELAY_MS) } return true } fun onQueryTextSubmit(query: String): Boolean { rowsAdapter.clear() if (!TextUtils.isEmpty(query)) { delayedLoad.setSearchQuery(query) handler.removeCallbacks(delayedLoad) handler.postDelayed(delayedLoad, SEARCH_DELAY_MS) } return true } companion object { private val SEARCH_DELAY_MS = 300 } }
Java
public class MySearchFragment extends SearchFragment implements SearchFragment.SearchResultProvider { private static final int SEARCH_DELAY_MS = 300; private ArrayObjectAdapter rowsAdapter; private Handler handler = new Handler(); private SearchRunnable delayedLoad; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter()); setSearchResultProvider(this); setOnItemClickedListener(getDefaultItemClickedListener()); delayedLoad = new SearchRunnable(); } @Override public ObjectAdapter getResultsAdapter() { return rowsAdapter; } @Override public boolean onQueryTextChange(String newQuery) { rowsAdapter.clear(); if (!TextUtils.isEmpty(newQuery)) { delayedLoad.setSearchQuery(newQuery); handler.removeCallbacks(delayedLoad); handler.postDelayed(delayedLoad, SEARCH_DELAY_MS); } return true; } @Override public boolean onQueryTextSubmit(String query) { rowsAdapter.clear(); if (!TextUtils.isEmpty(query)) { delayedLoad.setSearchQuery(query); handler.removeCallbacks(delayedLoad); handler.postDelayed(delayedLoad, SEARCH_DELAY_MS); } return true; } }
Önceki örnek kodun bir SearchRunnable
sınıfıyla kullanılması amaçlanmıştır
'i kullanın. Bu teknik, çalışma sırasında
sorgularının ana kullanıcı arayüzü ileti dizisini engellemesini önler.