- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以在 Leanback 展示应用的自定义标题 View 中使用多个 SearchOrb 按钮或其他可聚焦按钮?问题是我只能关注一个按钮...
更新:
我做了什么:
有自定义标题 View 类,其中包含搜索球、标题 TextView 、自定义球和模拟时钟。
问题是,当我尝试关注 Search Orb 时,焦点转到自定义 Orb 上......仅此而已。仅关注自定义 Orb。
主搜索 Orb 的点击监听器已设置。我不知道问题出在哪里。如果需要,我可以按需发布其他代码。
感谢您的帮助!
标题 View .xml:
<?xml version="1.0" encoding="utf-8"?>
<com.olegmart.smart.base.CustomTitleView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/browse_title_group"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
自定义标题 View .java:
package com.olegmart.smart.base;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v17.leanback.widget.SearchOrbView;
import android.support.v17.leanback.widget.TitleViewAdapter;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.ImageView;
import com.olegmart.smart.R;
public class CustomTitleView extends RelativeLayout implements TitleViewAdapter.Provider {
private final TextView mTitleView;
private final View mAnalogClockView;
private final View mGridOrbView;
private final View mSearchOrbView;
private final TitleViewAdapter mTitleViewAdapter = new TitleViewAdapter() {
@Override
public View getSearchAffordanceView() {
return mSearchOrbView;
}
@Override
public void setTitle(CharSequence titleText) {
CustomTitleView.this.setTitle(titleText);
}
@Override
public void setBadgeDrawable(Drawable drawable) {
//CustomTitleView.this.setBadgeDrawable(drawable);
}
@Override
public void updateComponentsVisibility(int flags) {
/*if ((flags & BRANDING_VIEW_VISIBLE) == BRANDING_VIEW_VISIBLE) {
updateBadgeVisibility(true);
} else {
mAnalogClockView.setVisibility(View.GONE);
mTitleView.setVisibility(View.GONE);
}*/
int visibility = (flags & SEARCH_VIEW_VISIBLE) == SEARCH_VIEW_VISIBLE
? View.VISIBLE : View.INVISIBLE;
mSearchOrbView.setVisibility(visibility);
}
private void updateBadgeVisibility(boolean visible) {
if (visible) {
mAnalogClockView.setVisibility(View.VISIBLE);
mGridOrbView.setVisibility(View.VISIBLE);
mTitleView.setVisibility(View.VISIBLE);
} else {
mAnalogClockView.setVisibility(View.GONE);
mGridOrbView.setVisibility(View.GONE);
mTitleView.setVisibility(View.GONE);
}
}
};
public CustomTitleView(Context context) {
this(context, null);
}
public CustomTitleView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomTitleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
View root = LayoutInflater.from(context).inflate(R.layout.custom_titleview, this);
mTitleView = (TextView) root.findViewById(R.id.title_tv);
mAnalogClockView = root.findViewById(R.id.clock);
mGridOrbView = root.findViewById(R.id.grid_orb);
mSearchOrbView = root.findViewById(R.id.search_orb);
}
public void setTitle(CharSequence title) {
if (title != null) {
mTitleView.setText(title);
mTitleView.setVisibility(View.VISIBLE);
mGridOrbView.setVisibility(View.VISIBLE);
mAnalogClockView.setVisibility(View.VISIBLE);
}
}
public void setBadgeDrawable(Drawable drawable) {
if (drawable != null) {
mTitleView.setVisibility(View.GONE);
mGridOrbView.setVisibility(View.VISIBLE);
mAnalogClockView.setVisibility(View.VISIBLE);
}
}
@Override
public TitleViewAdapter getTitleViewAdapter() {
return mTitleViewAdapter;
}
}
custom_titleview.xml:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v17.leanback.widget.SearchOrbView
android:id="@+id/search_orb"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:transitionGroup="true"
android:layout_gravity="center_vertical|start"
android:layout_marginTop="8dp"
android:paddingStart="48dp"
android:focusable="true"
android:nextFocusRight="@+id/grid_orb"
/>
<AnalogClock
android:id="@+id/clock"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="6dp"
android:layout_alignParentEnd="true"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="24dp" />
<android.support.v17.leanback.widget.SearchOrbView
android:id="@+id/grid_orb"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/clock"
android:nextFocusLeft="@+id/search_orb"
android:focusable="true"
/>
<TextView
android:id="@+id/title_tv"
android:textAppearance="@android:style/TextAppearance.Large"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/grid_orb" />
</merge>
最佳答案
Teng-pao Yu 是正确的....BrowseFragment 中的 OnFocusSearchListener 是焦点变化没有如您预期的那样发生的原因。
先介绍一下背景......
当发生焦点搜索时,它将首先调用当前 ViewGroup 中的 focusSearch 方法。在这种情况下,虽然搜索球体具有当前焦点,并且用户按下方向键将焦点放在不同的方向,但焦点搜索的第一个回调将在您的 CustomTitleView 类中。只有在 CustomTitleView 将 focusSearch 传播到 BrowseFragment 的 OnFocusSearchListener 的父级之后。
这里真正的问题是(在撰写本文时),Leanback BrowseFragment 的 OnFocusSearchListener 已编码,因此您添加到 CustomTitleLayout 的其他 View 实际上永远无法获得焦点。
但是,有一种方法可以在您的 CustomTitleLayout 中聚焦其他 subview ....
如下面的代码示例所示,重写 CustomTitleLayout 中的 focusSearch 方法,并返回自定义标题布局中存在的可聚焦 View (与返回 super.focusSearch 相反)。
请注意,此代码取决于对 CustomTitleView 的 subview 设置 nextFocusLeft 和 nextFocusRight 属性。此外, subview 必须是可聚焦的 View (按钮等)。如果 subview 在默认情况下不可聚焦(类似于 TextView),您将必须手动启用 View 以通过 XML 使用 android:focusable="true"
或在代码中使用 View.setFocusable(true)
.
public class CustomTitleView extends RelativeLayout implements TitleViewAdapter.Provider {
.... all your custom view stuff....
@Override
public View focusSearch(View focused, int direction) {
View nextFoundFocusableViewInLayout = null;
// Only concerned about focusing left and right at the moment
if (direction == View.FOCUS_LEFT || direction == View.FOCUS_RIGHT) {
// Try to find the next focusable item in this layout for the supplied direction
int nextFoundFocusableViewInLayoutId = -1;
switch(direction) {
case View.FOCUS_LEFT :
nextFoundFocusableViewInLayoutId = focused.getNextFocusLeftId();
break;
case View.FOCUS_RIGHT :
nextFoundFocusableViewInLayoutId = focused.getNextFocusRightId();
break;
}
// View id for next focus direction found....get the View
if (nextFoundFocusableViewInLayoutId != -1) {
nextFoundFocusableViewInLayout = findViewById(nextFoundFocusableViewInLayoutId);
}
}
// Return the found View in the layout if it's focusable
if (nextFoundFocusableViewInLayout != null && nextFoundFocusableViewInLayout.isFocusable()) {
return nextFoundFocusableViewInLayout;
} else {
// No focusable view found in layout...propagate to super (should invoke the BrowseFrameLayout.OnFocusSearchListener
return super.focusSearch(focused, direction);
}
}
@Override
protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
// Gives focus to the SearchOrb first....if not...default to normal descendant focus search
return getSearchAffordanceView().requestFocus() || super.onRequestFocusInDescendants(direction, previouslyFocusedRect);
}
}
关于android - 在 leanback 的标题 View 中使用多个 Orb 按钮或其他按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38169378/
问题:ORB.destroy() 无法正确清理,ORB 对象实例不会被垃圾回收。 此问题是在 JDK5 中提出的,并在此处记录的后续版本中修复 http://bugs.java.com/view_bu
此问题涉及:Is it possible to have several ORB objects in the same process? 所以,多亏了@BrianKelly,我找到了有关 ORB 标
我有一个 C++ CORBA 服务器,它实现了一个抛出用户定义异常的接口(interface)。 当客户端和服务器都用 C++ 实现时(使用 TAO orb 和omniORB 进行测试),我可以轻松捕
诚然,我是 CORBA 和 ORB 的新手。我有一些代码安装在使用 TAO ORB 版本 1.3 的第 3 方计算机上。当我的代码调用时: String myObjectString = "IOR:0
我想从属性文件初始化我的 ORB(通常我像这样初始化它,同时运行我的示例: ./app -ORBInitRef NameService=corbaloc::localhost:2809/NameSer
我需要对我的机器人进行编程,以便它能够找到被要求拾取的物体并将其带到指定位置。我尝试过简单的 img 处理技术,例如过滤、轮廓查找。这似乎效果不佳。我想使用 ORB 特征提取器。这是一个示例图像。感兴
我正在使用 Open CV 进行一个无标记的增强现实项目。目前我正在使用 ORB 来检测特征和增强 3D 对象。到目前为止,模型增强得很好,但增强并不像预期的那样顺利。增强型 3D 模型很紧张。 有哪
我有一个程序可以从 RSTP 获取视频源并检查对象。唯一的问题是物体需要距离摄像头大约 6 英寸,但当我使用有线网络摄像头时,物体可能在几英尺远。两个摄像头都以相同的分辨率传输,是什么导致了这个问题?
我正在尝试使用 OpenCV 从图像中检测和提取 ORB 特征。 但是,我得到的图像没有标准化(不同尺寸、不同分辨率等...)。 我想知道在提取 ORB 特征之前是否需要规范化我的图像以便能够跨图像匹
我有一个 orbd 在虚拟主机(IP A)上启动,并注册了一些远程对象。托管虚拟盒子的盒子有 IP B。当客户端尝试连接到位于 A 的 ORB 以获取 NamingContext 时,ORB 使用指向
我不确定我是否正确理解什么是开源。我在这里搜索以找到答案,但没有找到有人问类似的问题。 我如何在文件“features.hpp”中看到“检测”功能的源代码。 我正在寻找算法ORB的数学计算。 所有人都
我的项目是基于android的草药识别。我使用 ORB 来获取关键点、特征和匹配特征。 我想使用这个算法: 我使用 4 个引用图像,并将它们的特征 image1 与 image1、1-2、1-3、1-
我想知道 orb 特征检测器的参数。我将它用作关键点提取器和描述符。作为匹配器,我使用 BFMatcher。 目前我是这样使用的: ORB orb(25, 1.0f, 2, 10, 0, 2, 0,
我使用 ORBacus .我有一个多线程应用程序,我想在同一进程中有多个 ORB 对象。这个想法是:每个线程都有自己的 ORB 并连接到不同服务器。 这可能吗?如果是 - 如何? “你试过什么?”:我
我有一个棘手的问题。作为 CORBA 的新手,我无法摆脱它。 如何从另一个实现实例化一个实现对象? 通常,如果我有一个接口(interface) A,我会创建一个 A_Impl 类(在 A_Impl.
我在 Python 中使用 OpenCV 来制作给定图像的特征描述符。为此,我正在使用 ORB 类。我不明白的是在使用 orb.detect 和 orb.compute 之后描述符数组包含什么方法。
我无法弄清楚 ORB 算法输出中的关键点在 OpenCV 中是如何排名的。 通过在一些样本上进行测试,我知道它不是按帧上的位置,而且我认为它不是按算法分配给每个关键点的分数。 我的目标是根据分数对关键
我正在开发一个特征跟踪应用程序,到目前为止,在尝试了几乎所有的特征检测器/描述符之后,我使用 ORB 获得了最令人满意的总体结果。我的特征描述符和检测器都是 ORB。 我正在选择一个特定区域来检测源图
大家好 :) 我只是 openCV 的初学者。 我一直在尝试使用 ORB 开发跟踪程序。我只想在检测到的对象周围绘制矩形。 这是一部分 result的跟踪程序。 “黑车”是我要跟踪的(感兴趣的对象)。
我最近在 opencv 的 ORB 中发现了一些非常奇怪的行为描述符。 cv::Mat grey; //greyscale image std::vector keypoints; cv::Mat d
我是一名优秀的程序员,十分优秀!