所以我想出了一个方法来实现这一点,
首先,我创建了一个覆盖 MediaRouteActionProvider 的类(这是控制该按钮功能的主类)
public class CustomMediaRouteActionProvider extends androidx.mediarouter.app.MediaRouteActionProvider {
public CustomMediaRouteActionProvider(Context context) {
super(context);
}
@Override
public MediaRouteButton onCreateMediaRouteButton() {
return new CastButton(getContext());
}
}
然后你需要用你自己的来覆盖按钮的功能,在我的例子中,我打开了一个新的活动。
public class CastButton extends MediaRouteButton {
public CastButton(Context context) {
this(context, null);
}
public CastButton(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.mediaRouteButtonStyle);
}
public CastButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean performClick() {
Intent i = new Intent(getContext(), RemoteDevicesActivity.class);
getContext().startActivity(i);
return true;
}
}
最后,您需要修改包含此按钮的 xml(我假设您已经实现了这部分)
使用您的自定义类(在本例中为 CustomMediaRouteActionProvider)更改字段 app:actionProviderClass,您就完成了。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:title="@string/connect_to"
android:id="@+id/cast"
app:actionProviderClass="CustomMediaRouteActionProvider"
app:showAsAction="ifRoom" />
</menu>