DispatchKeyEvent:确定getCurrentFocus视图的确切类型

问题描述:

我有一个自定义的活动组,该视图添加视图并将其删除到堆栈。DispatchKeyEvent:确定getCurrentFocus视图的确切类型

我覆盖dispatchKeyEvent检查某些按下的键。

的问题是,我需要检查这样的电流集中视图类型:

View v=getCurrentFocus(); 

当我检查的视图的类型, 它返回一个类型这样

com.android.internal.policy.impl.PhoneWindow$DecorView 

这是什么类型,我可以将任何类对象转换为此类型?

谢谢

不,你不能只是将任何类对象转换为这种类型!最佳做法是,你只应该建立类层次结构,或者如果你真的必须抛弃,首先使用instanceof操作符检查类型。

另外,根据包名来判断它是一个内部的android类,所以你不想在你的代码中引用任何引用 - 如果它是内部的,那就不是api。他们可以在任何时候改变它,你的应用程序会立即被破坏。

你为什么要检查视图的类型? 您是否在寻找特定类型? 如果是这样,它是更安全的(例如)做:

View v = getCurrentFocus(); 
if(v instanceof SomeView){ 
//do stuff 
} 

,或者如果它的装修风格视图中,您有兴趣使用getDecorView代替getCurrentFocus。

+0

感谢Kett,但我收到的意见类型,装饰视图,有时是正常的textview或edittext,所以我正在寻找一个标准来区分这些 – 2011-03-27 18:50:11

+0

,所以你关心什么类型的视图? – katsharp 2011-03-27 18:51:54

+0

我想采取一定的行动,如果视图DecorView – 2011-03-27 18:53:36