欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android TV listview及焦点处理

程序员文章站 2023-12-03 12:38:10
android tv listview及焦点处理 android tv上的listview ,因为没有touch事件,只能通过按键处理,因此,用到listview时需要特...

android tv listview及焦点处理

android tv上的listview ,因为没有touch事件,只能通过按键处理,因此,用到listview时需要特殊处理:

1.复杂的view需要获取焦点,需要设置:

setitemscanfocus(true)

同时需要设置下能获取焦点view的属性:

android:focusable="true

这样子级view就可以获取获取焦点。

2.view中需要获取焦点需要高亮框效果,可以在view画外框:

package com.cn21.ecloud.tv.ui.widget; 
 
import android.content.context; 
import android.graphics.canvas; 
import android.graphics.rect; 
import android.graphics.drawable.drawable; 
import android.util.attributeset; 
import android.widget.relativelayout; 
 
public class selectedrelativelayout extends relativelayout{ 
  private drawable mfloatdrawable; 
  private rect mtemprect = new rect(); 
 
  public selectedrelativelayout(context context) { 
    this(context, null, 0); 
  } 
 
  public selectedrelativelayout(context context, attributeset attrs) { 
    this(context, attrs, 0); 
  } 
 
  public selectedrelativelayout(context context, attributeset attrs, int defstyleattr) { 
    super(context, attrs, defstyleattr); 
    mfloatdrawable = getresources().getdrawable(r.drawable.item_float_rectangle); 
  } 
 
  @override 
  protected void dispatchdraw(canvas canvas) { 
    super.dispatchdraw(canvas); 
    if (hasfocus()) { 
      if (mfloatdrawable != null) { 
        final int w = getmeasuredwidth(); 
        final int h = getmeasuredheight(); 
        mfloatdrawable.getpadding(mtemprect); 
        mfloatdrawable.setbounds(-mtemprect.left, -mtemprect.top, 
            w + mtemprect.right, h + mtemprect.bottom); 
        mfloatdrawable.draw(canvas); 
      } 
    } 
  } 
} 

布局中直接使用这个view

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!