美文网首页
焦点导航(三)

焦点导航(三)

作者: fengfancky | 来源:发表于2017-11-28 11:14 被阅读300次

用户可以使用遥控器的方向键或者箭头键来远程控制电视。这种类型的控制限制为向上,向下,向左,向右运动。Android框架自动处理布局元素之间的方向导航,通常不需要为应用程序做任何额外的操作。然而,你应该使用方向键来彻底的测试以便发现导航过程中的任何问题。遵循以下规则:

  • 用户使用方向键能够浏览到屏幕上的所有控件。
  • 通过焦点滚动列表,通过上下键滚动列表,使用“Enter”键可以选中子项。
  • 确保控件之间的切换是直接的、可预测的。

为满足上述规则,往往需要自定义导航,如下:

<TextView android:id="@+id/Category1"
    android:nextFocusDown="@+id/Category2"\>

nextFoucsDown 按下方向键时,指定下一个获取焦点的视图;
nextFoucsLeft 按左方向键时,指定下一个获取焦点的视图;
nextFoucsRight 按 右方向键时,指定下一个获取焦点的视图;
nextFoucsUp 按上方向键时,指定下一个获取焦点的视图;

对于布局中的多个view我们可以使用上述方式来进行导航,如果存在ViewGroup,我们需要一些额外操作,原理一样。如下:
现在需要通用遥控器使焦点从一个view到达RecyclerView 的某一项。

给RecyclerView中需要导航的项指定id:

public class TabHomeAdapter extends RecyclerView.Adapter {

private Context mContext;
private List<CatgoryData> list;

public TabHomeAdapter(Context mContext, List<CatgoryData> list){
    this.mContext=mContext;
    this.list=list;
}

private List<Integer> ids = new ArrayList<Integer>() {
    {
        add(R.id.title_bar1);
        add(R.id.title_bar2);
        add(R.id.title_bar3);
        add(R.id.title_bar4);
        add(R.id.title_bar5);
        add(R.id.title_bar6);
        add(R.id.title_bar7);
        add(R.id.title_bar8);
    }
};


@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view=LayoutInflater.from(mContext).inflate(R.layout.tab_home_item_layout,null);
    return new TabHomeHolder(view);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    final TabHomeHolder tabHomeHolder= (TabHomeHolder) holder;
    tabHomeHolder.itemView.setId(ids.get(position));
}

@Override
public int getItemCount() {
    return list.size();
}

private static class TabHomeHolder extends RecyclerView.ViewHolder{
    private TextView tabName;
    public TabHomeHolder(View view){
        super(view);
        tabName= (TextView) view.findViewById(R.id.tab_name);
    }
}
}

在values目录下添加ids.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id"  name="title_bar1" />
    <item type="id"  name="title_bar2" />
    <item type="id"  name="title_bar3" />
    <item type="id"  name="title_bar4" />
    <item type="id"  name="title_bar5" />
    <item type="id"  name="title_bar6" />
    <item type="id"  name="title_bar7" />
    <item type="id"  name="title_bar8" />
</resources>

在通过设置setNextFocusXXX(R.id.title_bar...)使指定项获得焦点。

禁止某个方向的导航操作:

view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            //禁止向下键,拦截KeyEvent.KEYCODE_DPAD_DOWN
            if (keyCode==KeyEvent.KEYCODE_DPAD_DOWN){
                return true;
            }
            return false;
        }
    });

相关文章

  • 焦点导航(三)

    用户可以使用遥控器的方向键或者箭头键来远程控制电视。这种类型的控制限制为向上,向下,向左,向右运动。Android...

  • Android TV 开发总结概览

    焦点设置(一)焦点选中状态(二)焦点导航(三)事件(四)AndroidTVWidget框架之运动焦点框(五)And...

  • fullpage 常用参数

    navigation:true,//显示焦点导航navigationPosition:'left',//总的焦点导...

  • webbrowser导航完毕设置焦点

    自己软件内页加了一个webbrowser,但是每次在外面输入网页地址后,鼠标移动到webbrowser内总是不能直...

  • swiper实现图片焦点导航

    引入swiper.min.js和swiper.miin.css

  • Xcode基本操作

    1.Xcode IDE概览 说明:从左到右,依次是“导航窗格(Navigator)->边列(Gutter)->焦点...

  • js随机生成颜色

    方式一 方式二 方式三 网站导航 网站导航

  • 网站内链优化基础知识大全(二)

    三、外部链接的表现办法 ①:网站导航 罕见的网站导航有顶部主导航、您事先方位的面包屑导航、左面商品导航、底部次导航...

  • Xamarin.Froms 第20局:导航

    总目录 前言 本文介绍导航:一、导航概述二、传递数据三、导航堆栈四、导航栏 环境 1.Visual Studio ...

  • 美加自驾导航软件推荐和使用

    前往美国和加拿大房车自驾,导航怎么选?车载GPS还是手机导航? 导航主要分为三类:地图,手机导航软件和车载导航GP...

网友评论

      本文标题:焦点导航(三)

      本文链接:https://www.haomeiwen.com/subject/jkkovxtx.html