【问题标题】:Custom title bar code breaking onCreate()自定义标题条码打破 onCreate()
【发布时间】:2012-08-16 05:53:20
【问题描述】:

我制作了一个自定义标题栏,我希望它出现在我的应用程序中的所有活动中。它在我的主要活动中完美运行:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);

但是我的主要活动调用了另一个活动,当我尝试在那里做相同的事情时它失败了:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.layout_2);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);  

尝试进行 findViewById() 崩溃,我将其中一个包裹在 try/catch 中以查看发生了什么:

TextView tv1;
try {    
    tv1 = (TextView)findViewById(R.id.header);
}
catch (Exception e)  {
    Log.d("MyActivity2", "boom");  
}

例外说 原因=ClassCastException detailMessage=android.widget.RelativeLayout

我不知道这是什么意思,注意如果我注释掉 requestWindowFeature() 会有没有问题getWindow() 调用。

提前感谢您对此的任何见解!!!

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您收到 ClassCastException ,则意味着 R.id.header 不是 TextView 。在您的布局中header 是Relativelayout 的名称。因此,将其更改为与 TextView 匹配。

    【讨论】:

    • 在 Activity2 的布局中,“标题”是一个 TextView。在标题栏中的“标题”是一个 RelativeLayout。但由于我在 Activity2 的 onCreate() 例程中访问“标题”,我认为名称范围将用于 Activity2,如果不是,那么它将在构建时被捕获。但我会尝试更改名称以避免命名空间冲突。
    • 好的,我将标题栏中的RelativeLayout 的名称更改为“title_rlayout”并且它起作用了。我发布了一个新问题来阐明 Android 中 XML 资源 ID 的范围规则:stackoverflow.com/questions/11988772/…
    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多