android - 长按选项卡布局的选定选项卡时显示弹出窗口
问题描述
我正在创建一个 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);
}
}
}
我想当用户长按每个选项卡时,弹出窗口恰好出现在选定位置。
如下图
我怎样才能做到这一点?
解决方案
(没有足够的积分来评论,所以发布为答案)
要在 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
希望这可以帮助
推荐阅读
- bash - 如何创建 cron 作业以每分钟运行一次 shell 脚本
- php - Currency Vue.js 过滤 Laravel 错误:使用未定义的恒定货币 - 假定为“货币”
- amazon-web-services - 如何在发起者的基于 AWS VPC 的国家/地区阻止传入的 3389 流量
- python-3.x - 网页抓取 - 卡在打印数字上
- java - Shiro No SecurityManager 可供调用代码访问
- swift - Swift:帮助 Json 解析可编码/可解码
- python - 如何在此循环中获得 BMI 的返回值?
- node.js - Node 的异步 IO 操作
- swift - UIButton 的 iOS 13 系统颜色
- c# - sendkeys error chrome driver emoji(ChromeDriver 只支持 BMP 中的字符)