我在文档中查找某种事件,该事件允许我检测何时创建视图或视图何时附加到活动,视图层次结构中的任何位置,无论是一级深度还是多层深。
这样的方法非常理想,无论是在Activity级别,Window级别还是Window.DecorView级别:
void ViewAttachedToActivity(View view)
{
... //triggered each time an individual view is added to activity
}
重要的是我希望能够从Activity的上下文中检测到这个事件,而不是从子视图本身的上下文中检测到。
下面是我正在努力完成的一个粗略演示。我想知道是否存在更有效的方法:
P.S。我知道我可以通过继承所有文本控件(如TextView,EditText,Button等)来完成自定义字体部分,并使用它们而不是库存控件,但我正在寻找一个简单的解决方法,可以帮助我避免这种情况。
(请原谅这个代码是用C#编写的,使用Mono for Android,它应该很容易理解并精神上转换为Java)
public class BaseActivity : SherlockFragmentActivity
{
public Typeface Voltaire { get; set; }
bool pendingLayout = false;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Voltaire = Typeface.CreateFromAsset(Assets, "fonts/voltaire-regular.ttf");
Window.DecorView.ViewTreeObserver.GlobalLayout += new EventHandler(ViewTreeObserver_GlobalLayout);
Window.DecorView.ViewTreeObserver.PreDraw += new EventHandler<ViewTreeObserver.PreDrawEventArgs>(ViewTreeObserver_PreDraw);
}
void ViewTreeObserver_GlobalLayout(object sender, EventArgs e)
{
pendingLayout = true;
}
void ViewTreeObserver_PreDraw(object sender, ViewTreeObserver.PreDrawEventArgs e)
{
if (pendingLayout)
{
pendingLayout = false;
SetTypeFace(Window.DecorView, Voltaire);
}
}
public void SetTypeFace(View view, Typeface typeface)
{
if (view is TextView)
{
((TextView)view).Typeface = typeface;
}
if (view is ViewGroup)
{
ViewGroup viewgroup = (ViewGroup)view;
for (int i = 0; i < viewgroup.ChildCount; i++)
{
SetTypeFace(viewgroup.GetChildAt(i), typeface);
}
}
}
}
答案 0 :(得分:0)
我不认为这样的事件存在