为了实现标题栏的个性化,我们经常要根据不同的界面自定义自己的标题栏,首先我们需要在activity或者fragment的oncreate函数中setContentView之前添加
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView之后添加
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_more);
由于我们要根据不同的fragment设置不同的标题栏,requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);放在TabHostActivity的oncreate中,
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_more);放在fragment的oncreate中。
代码如下:
package com.xhq.xweibo.ui;
import com.xhq.xweibo.R;
import com.xhq.xweibo.R.layout;
import com.xhq.xweibo.R.menu;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
public class TabMoreFragment extends Fragment
{
private static final String TAG = "TabMoreFragment";
private Activity mActivity;
private View mTitleView;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
mActivity = this.getActivity();
mActivity.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_more);
mTitleView = mActivity.findViewById(R.id.title_more);
mTitleView.setVisibility(View.GONE);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
Log.d(TAG, "onViewCreated");
mTitleView.setVisibility(View.VISIBLE);
}
@Override
public void onDestroyView()
{
super.onDestroyView();
Log.d(TAG, "onDestroyView");
mTitleView.setVisibility(View.GONE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_tab_more, null);
}
}
我们要在fragment的onViewCreated中把自定义的标题栏布局显示出来,在onDestroyView中把标题布局隐藏起来,如果不隐藏起来的话多个标题栏布局就会重叠在一起了。
这样我们就显示了自定义的标题栏了,但是这样还不够,因为我们还无法调整标题栏的高度和背景。
我们还要自定义标题栏的高度和背景,我们要写两个风格
<style name= "CustomWindowTitleBackground">
<item name="android:background">@drawable/title_bg</item>
</style>
<style name="tabhost" parent="android:Theme">
<item name="android:windowTitleSize">40dp</item>
<item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
</style>
然后再manifest中activity作如下设置
<activity
android:name="com.xhq.xweibo.ui.TabHostActivity"
android:theme="@style/tabhost"
android:label="@string/title_activity_tab_host" >
</activity>
把主体theme设为我们自定义的主题。这样我们就完成了自定义标题栏。效果图如下: