我正在尝试在android设计库中使用新的TabLayout
我想在标签上创建一个具有可绘制背景的TextView
TabLayout
例如

我在搜索框中搜索洛杉矶
我应该在TextView中获取Books,Movie,Place的数量。


示例图片:

android - Android:如何创建具有可绘制计数TabView的TabLayout?-LMLPHP

最佳答案

嗨,尼克希尔,您必须使用自定义视图来设置标签集,以使用事件总线更改搜索结果。
了解evet巴士推荐EventBus: Events for Android

search_tab_layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:gravity="center"
    android:background="@color/app_blue">

    <!-- Menu Item Image -->
    <TextView
        android:id="@+id/tabTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/count"
        android:text="Book"
        android:textSize="12sp"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:paddingRight="8dp"
        android:layout_centerVertical="true"
        android:textColor="@color/white"
        app:customTypeface="mayriad_pro_regular"/>

    <TextView
        android:id="@+id/count"
        android:layout_width="18dp"
        android:layout_height="18dp"
        android:text="0"
        android:gravity="center"
        android:textSize="10sp"
        android:background="@drawable/cart_circle"
        android:textColor="@color/app_blue"
        app:customTypeface="mayriad_pro_semi_bold"/>

</LinearLayout>


在创建时声明标签页

tab1 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.search_tab_layout, null);

tab2 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.search_tab_layout, null);

tab3 = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.search_tab_layout, null);


在onCreateOptionMenu中,使用eventBus触发搜索事件

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_search, menu);
        SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        if (null != searchView) {
            searchView.setSearchableInfo(searchManager
                    .getSearchableInfo(getActivity().getComponentName()));
            searchView.setIconifiedByDefault(false);
        }

        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
            public boolean onQueryTextChange(String newText) {
                // this is your adapter that will be filtered
                EventBus.getDefault().post(new SearchViewFilterEvent(newText));
                return true;
            }

            public boolean onQueryTextSubmit(String query) {
                //Here u can get the value "query" which is entered in the search box.
                return false;
            }
        };
        searchView.setOnQueryTextListener(queryTextListener);
        MenuItemCompat.setOnActionExpandListener(menu.getItem(0), new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem menuItem) {
                adapter.setIsHideWashAndFold(true);
                tabLayout.removeTabAt(0);
                adapter.notifyDataSetChanged();
                llSpinner.setVisibility(View.GONE);
                tabLayout.getTabAt(0).setCustomView(tab);
                tabLayout.getTabAt(1).setCustomView(tab2);
                tabLayout.getTabAt(2).setCustomView(tab3);
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem menuItem) {
                adapter.setIsHideWashAndFold(false);                adapter.notifyDataSetChanged();
                llSpinner.setVisibility(View.VISIBLE);
                initView();
                return true;
            }
        });

        new Handler().post(new Runnable() {
            @Override
            public void run() {
                final View v = getActivity().findViewById(R.id.menu_search);

                if (v != null) {
                    v.setOnLongClickListener(new View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            return false;
                        }
                    });
                }
            }
        });
    }

关于android - Android:如何创建具有可绘制计数TabView的TabLayout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41828765/

10-11 21:35