我正在尝试将视图添加到Android Activity中的工具栏中。下面的“decorView”是操作栏/工具栏的RelativeLayout子视图。
定义容器:
ActionBar actionBar = getSupportActionBar();
if (actionBar == null) {
Toolbar toolBar = (Toolbar) findViewById(R.id.action_bar);
setSupportActionBar(toolBar);
}
actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setCustomView(getActionBarLayoutResourceId());
this.mActionBarView = (RelativeLayout) actionBar.getCustomView()
.findViewById(R.id.relative_layout_action_bar);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setHomeButtonEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
} else {
log("ActionBar is null");
}
添加视图:
final ViewGroup decorView = this.mActionBarView;
Runnable postDecorHeaderView = new Runnable() {
@Override
public void run() {
if (decorView.getWindowToken() != null) {
// The Decor dView has a Window Token, so we can add the
// HeaderView!
decorView.addView(mHeaderView);
} else {
try {
Thread.sleep(1000); // 1 second
} catch (InterruptedException e) {
log(e.getClass() + ": " + e.getMessage());
}
// The Decor View doesn't have a Window Token yet, post
// ourselves again...
decorView.post(this);
}
}
};
decorView.post(postDecorHeaderView);
我已经确认,在此方法完成后,decorView的子计数会增加。不幸的是,我的“mHeaderView”没有出现,也没有出现在视图层次结构分析中。我尝试过其他UI更新,例如更改TextView的文本无效。
我已经在runnable中验证了decorView的身份。如果我记录了runnable,我看到它正在运行,我验证它是在主UI线程上运行的......但是没有发生可视更新。
答案 0 :(得分:0)
通过从现有视图中抓取工具栏,自定义布局已存在于视图中。所以我不需要另外“setCustomView”。我不确定这个第二个自定义视图布局在屏幕上的位置(甚至使用调试工具,我找不到布局),但尝试发布并添加子视图不起作用。
最终,我所做的就是将mActionBarView设置器更改为:
this.mActionBarView = (RelativeLayout) findViewById(R.id.relative_layout_action_bar);