カスタムタイトルバーコンポーネントを取得setContentViewを設定するには
6051 ワード
最近、仕事で奇抜な問題に遭遇しました.Activityにはタイトルバー&Fragmentしか必要ありません.問題をより詳細に説明するためには、ここでは専門的な知識を導入する必要があります.
タイトルバースタイル を定義する. AndroidManifestで声明 Activityに を追加する
これでカスタムタイトルバー付きActivityが完成!
titlebar.xmlレイアウトは次のとおりです.
タイトルバー&Framgentが必要ならactivityは必要ありませんmainレイアウトか!?こんな風に書けると思います.
titlebarLayoutでブレークポイントを打つと、titlebarLayoutはnullです!!
定義activity_main.xmlレイアウトファイル、内容は以下の通りです.
そして実行してOK!
カスタムタイトルバーを使用する場合、setContentViewがない場合、カスタムtitlebarのコンポーネントはonCreateで取得できません.
1.Activityでタイトルバーを定義する
<style name="style_titlebar_stand" parent="android:Theme.Light">
<item name="android:windowTitleSize">45dp</item>
<item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
</style>
<style name="WindowTitleBackground">
<item name="android:background">@color/green</item>
</style>
<color name="green">#00ff00</color>
<activity android:name=".MainActivity" android:theme="@style/style_titlebar_stand">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
これでカスタムタイトルバー付きActivityが完成!
2.奇抜な質問
titlebar.xmlレイアウトは次のとおりです.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/fl_titlebar" android:layout_height="match_parent"></FrameLayout>
タイトルバー&Framgentが必要ならactivityは必要ありませんmainレイアウトか!?こんな風に書けると思います.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
// setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
FrameLayout titlebarLayout=(FrameLayout)findViewById(R.id.fl_titlebar);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new TestFragment()).commit();
}
titlebarLayoutでブレークポイントを打つと、titlebarLayoutはnullです!!
3.奇抜な解決方法
定義activity_main.xmlレイアウトファイル、内容は以下の通りです.
<?xml version="1.0" encoding="utf-8"?>
<merge>
</merge>
そして実行してOK!
結論
カスタムタイトルバーを使用する場合、setContentViewがない場合、カスタムtitlebarのコンポーネントはonCreateで取得できません.