思考:
Tablayout是安卓官方提供的,内部的点击事件都在内部封装,没有暴露类似的回调接口让用户自己处理某个tab的点击事件,
但是通过看源码发现 每一个tab的点击事件其实是一个内部封装的继承自LinearLayout的一个TabView来触发的
看1496行有个performClick方法,我们只要把这个方法拦截住,然后自己处理点击逻辑就可以了,这个方法里的this.tab.select()执行后你就会看到页面的上的tab选中了。
具体做法:这里只贴关键代码
TabLayout tl = findViewById(R.id.film_tl);
TabLayout.Tab tab = tl.newTab();
LinearLayout view = tab.view;
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//这里做你想做的事情 然后return true 就不在往下执行了
return true;
tl.addTab(tab.setText("小视频"));
如果Tablayout关联了ViewPager 那么对应的Tab 可以通过
tl.getTabAt(i) 来获取
收获:细心、耐心 问题总能找到突破口,之前考虑过自定义Tablayout ,但是最后发现 这么几行代码也可以解决问题,只有深入理解了问题的本质才可以更好的解决问题。
背景:特定需求,点击某一个tab时,直接跳转到其他页面,不做任何选中操作,如下图点击小视频要跳转而不是选中这个tab思考:Tablayout是安卓官方提供的,内部的点击事件都在内部封装,没有暴露类似的回调接口让用户自己处理某个tab的点击事件,但是通过看源码发现 每一个tab的点击事件其实是一个内部封装的继承自LinearLayout的一个TabView来触发的看14...
Android
design支持库中提供的
TabL
ay
out默认把
Tab
的OnClickListener给写死了,但是在项目中有时候需要做一些控制处理,比如选中某一个
Tab
之前必须是先登录,未登录的情况需要跳转到登录界面。
我们可以通过给
TabL
ay
out中的
Tab
View重设OnClickListener解决这个问题
重新设置
点击事件
在日常开发中,经常遇到需要设置
tab
不选中的需求,如下图,在点击右侧时间选择框的时候,需要将左侧的
tab
的选中状态给重置掉。
由于
TabL
ay
out没有类似unSelect()的接口,因此我们可以通过更改
tab
的指示线和
tab
文字颜色来实现。下面提供重置
tab
状态和高亮显示
tab
的方法。
高亮显示
tab
//highlight the color of
tab
text &am...
悬浮窗布局文件就不放了,就是水平LinearL
ay
out里面放几个ImageView。
做的过程当中遇到一个问题,就是悬浮窗是可以任意拖拽的,悬浮窗里面的按钮是可以点击的,比如暂停,下一曲,关闭悬浮窗等。
按常规思路,先给整个悬浮窗setOnTouchListener,然后再给你里面的按钮setOnClickListener,点击运行,结果发现,
点击事件
是可以响应,拖拽也没问题,但是当手指放在ImageView上拖拽时,o
//
tabl
ay
out
点击事件
for (int i = 0; i <
tabl
ay
out.get
Tab
Count(); i++) {
TabL
ay
out.
Tab
tab
= m
tab
_record.get
Tab
At(i);
if (
tab
== null) return;
//这里使用到反射,拿到
Tab
对象后获取Class
Class c =
tab
.ge...
可以使用
Android
提供的 BroadcastReceiver 来
拦截
蓝牙设备的物理按键事件。具体步骤如下:
1. 注册 BroadcastReceiver:在
Android
Manifest.xml 文件中注册一个 BroadcastReceiver,监听 ACTION_MEDIA_BUTTON 操作,代码如下:
<receiver
android
:name=".MyBroadcastReceiver">
<intent-filter>
<action
android
:name="
android
.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
2. 创建 BroadcastReceiver:在你的代码中创建一个 BroadcastReceiver,重写 onReceive() 方法,获取按键事件并处理,代码如下:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) {
// 处理按下事件
注意:这种方式只能
拦截
蓝牙设备的物理按键事件,无法
拦截
蓝牙设备的触摸事件或其他事件。
constructor(context: Context) : super(context)
constructor(context: Context, attr: AttributeSet) : super(context, attr)
override fun selectTab(tab: Tab?) {
if (hookTab == tab) {
}else{
super.selectTab(tab)
Android Mqtt 开源框架 EasyMqttAndroidClient
xinglei0352: