动态文本视图在带遥控器的 Android 电视中不可选择和可点击

Posted

技术标签:

【中文标题】动态文本视图在带遥控器的 Android 电视中不可选择和可点击【英文标题】:Dynamic textview not selectable and clickable in Android tv with remote control 【发布时间】:2016-04-17 22:51:22 【问题描述】:

我在 listview 的行内创建了动态 textview,但该 textview 无法通过电视遥控器聚焦,我想知道 textview 是否有任何特定属性需要设置?

源码在这里:

@Override
public View getView(int position, View convertView, ViewGroup parent) 
    final EventData item = list.get(position);
    ViewHolder holder = null;
    if (convertView == null) 
        holder = new ViewHolder();
        inflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.list_item_livesports, null);

        holder.nameTV = (TextView) convertView.findViewById(R.id.nameTV);
        holder.teamsTV = (TextView) convertView.findViewById(R.id.teamsTV);
        holder.startsTV = (TextView) convertView.findViewById(R.id.startTV);
        holder.channelLL = (TableLayout) convertView
                .findViewById(R.id.channelLL);
        holder.catIV = (ImageView) convertView.findViewById(R.id.catIV);
        convertView.setTag(holder);
     else
        holder = (ViewHolder) convertView.getTag();

    holder.nameTV.setText(item.getName() + " : " + item.getTeams());
    holder.teamsTV.setText(item.getTeams());
    holder.startsTV.setText(item.getStarts());


    setDrawals(holder.catIV, item);

    TableRow tr_head = null;
    holder.channelLL.removeAllViews();
    for (int i = 0; i < item.linkList.size(); i++) 
        TextView v = new TextView(ctx);

        final Spanned name = html.fromHtml("<font color='#0000FF'>"
                + item.linkList.get(i).channelName + "</font>");
        final String link = item.linkList.get(i).channelLink;
        v.setText(name);

        if (i == 0 || i == 2 || i == 4 || i == 6 || i == 8 || i == 10) 
            tr_head = new TableRow(ctx);
            tr_head.setLayoutParams(new LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        
        v.setPadding(20, 15, 20, 15);
        tr_head.addView(v);


        v.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                // Toast.makeText(ctx, name, 1).show();
                linkListener.onLinkClicked(link);

            
        );
        if (i == 0 || i == 2 || i == 4 || i == 6 || i == 8 || i == 10)
            holder.channelLL.addView(tr_head, new TableLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

    

    return convertView;

【问题讨论】:

请出示您的代码? 请看一下,我用源代码编辑了问题 【参考方案1】:

这是在RecyclerView 中吗?

使用 DPAD,除非您手动覆盖并编写一个onKeyDown 方法,该方法在敲击回车键时执行单击,否则无法专注于 TextView。

您可能想为整个视图编写onClickListener,然后当检测到回车键时,获取当前视图并执行单击。

回收站视图:

convertView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            //Do stuff
        
    );

在你的活动中:

public boolean onKeyDown(int keyCode, KeyEvent event) 
  switch(keyCode) 
    case KeyEvent.KEYCODE_DPAD_CENTER:
            mRecyclerView.findViewHolderForAdapterPosition(index).itemView.performClick();
            break;
     

【讨论】:

嗨尼克感谢您的回答..我没有使用 Recyclerview..但我明白了..如果成功,将为您投票

以上是关于动态文本视图在带遥控器的 Android 电视中不可选择和可点击的主要内容,如果未能解决你的问题,请参考以下文章

Android电视机顶盒开发(一)

Android Studio TV 遥控器按钮

Imagebutton 安卓电视

Android TV-电视开发知识点速览

创维电视机ADB开关是啥

Java02