首页 > 解决方案 > 长按选项卡布局的选定选项卡时显示弹出窗口

问题描述

我正在创建一个 android 应用程序,并且我有一个带有 android.support.design.widget.TabLayout 和 ViewPager 的活动。

这是我的代码

activity_main.xml

<android.support.percent.PercentRelativeLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabMode="scrollable" />


<android.support.v4.view.ViewPager
    android:id="@+id/cards_grouping_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/tabs" />

MainActivity.java

public class MainActivity extends AppCompatActivity {

@BindView(R.id.tabs)
TabLayout tabs;
@BindView(R.id.cards_grouping_pager)
ViewPager pager;

private ArrayList<Category> categories = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_cards);
    ButterKnife.bind(this);

    categories = //getDataFromApi
    doSomeWorks();
}

private void doSomeWorks() {
    MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), categories);
    pager.setAdapter(adapter);
    tabs.setupWithViewPager(pager);

    LinearLayout tabStrip = (LinearLayout) tabs.getChildAt(0);
    for (int i = 0; i < tabStrip.getChildCount(); i++) {
        final int finalI = i;
        tabStrip.getChildAt(i).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                //I SHOULD SHOW POPUP HERE

            }
        });
    }
}


public class MyPagerAdapter extends FragmentPagerAdapter {

    private final ArrayList<String> TITLES = new ArrayList<>();

    MyPagerAdapter(FragmentManager fm, ArrayList<Category> categories) {
        super(fm);
        for (int i = 0; i < categories.size(); i++) {
            TITLES.add(categories.get(i).name);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES.get(position);
    }

    @Override
    public int getCount() {
        return TITLES.size();
    }

    @Override
    public Fragment getItem(int position) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return HorizontalTabsAdapter.newInstance(position, categories, displayMetrics.widthPixels,
                displayMetrics.heightPixels);
    }
}   
}  

我想当用户长按每个选项卡时,弹出窗口恰好出现在选定位置。
如下图

图片

我怎样才能做到这一点?

标签: androidpopupandroid-support-library

解决方案


(没有足够的积分来评论,所以发布为答案)

要在 tablayout 的每个选项卡上实现长按 clicklistener,请遵循这些答案

https://stackoverflow.com/a/43522131/6387236

https://stackoverflow.com/a/34982710/6387236

关于长按位置弹出窗口的实现,关注这个不错的博客,

https://rajeshandroiddeveloper.blogspot.in/2013/07/android-popupwindow-example-in-listview.html

希望这可以帮助


推荐阅读