Android:如何找到给定方向上的最近邻居(视图元素)

发布于 2024-12-21 13:13:37 字数 419 浏览 2 评论 0原文

我正在寻找一种在应用程序中导航的方法,使用虚拟方向键抛出所有元素。但是如何找到上下左右方向最近的邻居呢? 例如,我收到一个要关闭的事件,现在我想将焦点设置在下面的按钮上。

我不想像这样使用 xml 文件中的定义:

<LinearLayout android:orientation="vertical" ... >

    <Button android:id="@+id/top" android:nextFocusUp="@+id/bottom" ... />
    <Button android:id="@+id/bottom" android:nextFocusDown="@+id/top" ... />

</LinearLayout>

我该怎么做?

谢谢。

I'm searching a method to navigate in a app throw all elements with a virtual dpad. But how do I find the nearest neighbor in the directions up, down, left and right?
e.g I have an event received to go down, now I want to set the focus on the button below.

I don't want to use the definition in the xml files like this:

<LinearLayout android:orientation="vertical" ... >

    <Button android:id="@+id/top" android:nextFocusUp="@+id/bottom" ... />
    <Button android:id="@+id/bottom" android:nextFocusDown="@+id/top" ... />

</LinearLayout>

How can I do that?

Thx.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

罪#恶を代价 2024-12-28 13:13:37

为此,您应该重写 Activity 中的 onKeyDown() 方法,您可以使用 View.getFocusedChild() 方法找到当前聚焦的视图,然后使用View.focusSearch(int) 用于搜索下一个视图,View.requestFocus() 用于获取焦点。

我希望你能结合这些方法以获得好的结果:)

For this you should override onKeyDown() method in Activity, there you can find currently focused view with method View.getFocusedChild(), then use View.focusSearch(int) for searching next view, and View.requestFocus() for getting focus.

I hope you can combine this methods for good result :)

悲歌长辞 2024-12-28 13:13:37

我找到了聪明的解决方案(例如,向下):

bic=new BaseInputConnection(this.getWindow().getDecorView(),false);
KeyEvent event2 = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN,0, KeyEvent.META_SYM_ON, 0, 0, KeyEvent.FLAG_VIRTUAL_HARD_KEY); 

bic.sendKeyEvent(event2);

仅此而已,内部算法在您选择的方向上找到下一个元素

I found the smart solution (e.g for go down):

bic=new BaseInputConnection(this.getWindow().getDecorView(),false);
KeyEvent event2 = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN,0, KeyEvent.META_SYM_ON, 0, 0, KeyEvent.FLAG_VIRTUAL_HARD_KEY); 

bic.sendKeyEvent(event2);

Thats all, an internal algortihm find the next element in your selected direction

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文