requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
自定义Activity的标题栏(Titlebar)
http://www.189works.com/article-51509-1.html
本文仅用到了Window.FEATURE_CUSTOM_TITLE,
Window还有其他一些feature,比如FEATURE_CONTEXT_MENU,FEATURE_NO_TITLE,FEATURE_LEFT_ICON等。
下面是一个来自wfd的完整的例子
wfd中的首页布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="false"> </ListView> <TextView android:id="@id/android:empty" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="还没有会议刷新看看" android:gravity="center_horizontal" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="90dp" android:gravity="center_horizontal" android:orientation="vertical" android:layout_alignParentBottom="true"> <Button android:text="发起会议" android:id="@+id/launch" android:layout_width="200dp" android:layout_height="wrap_content"></Button> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"> <CheckBox android:id="@+id/use_password" android:text="" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启用密码"></TextView> </LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/home_refresh_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" android:layout_centerInParent="true" android:gravity="center"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"></ProgressBar> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在寻找会议室" android:paddingLeft="3dp"></TextView> </LinearLayout> <LinearLayout android:id="@+id/home_join_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" android:layout_centerInParent="true" android:gravity="center"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"></ProgressBar> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加入会议室" android:paddingLeft="3dp"></TextView> </LinearLayout> </RelativeLayout>
自定义title的布局
<?xml version="1.0" encoding="utf-8"?> <!-- 首页title布局 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="horizontal" android:gravity="center_vertical" android:padding="3dp"> <ImageView android:id="@+id/home_app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" android:paddingRight="5dip"></ImageView> <TextView android:id="@+id/home_app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name"></TextView> <LinearLayout android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:layout_gravity="center_vertical"> <ImageView android:id="@+id/home_refresh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/search_32" android:paddingRight="15dp"></ImageView> <ImageView android:id="@+id/home_options" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/gear_32"></ImageView> </LinearLayout> </LinearLayout> <TextView android:background="@drawable/divider" android:layout_height="1dip" android:layout_width="fill_parent"></TextView> </LinearLayout>
java代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.home); // 设置自定义的title getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.home_custom_title); // 添加一个footview // getListView().addFooterView( // LayoutInflater.from(this).inflate(R.layout.home_foot, null)); mAdapter = new MeetingRoomAdapter(); doAddTestData(); setListAdapter(mAdapter); mRefresh = (ImageView) findViewById(R.id.home_refresh); mOptions = (ImageView) findViewById(R.id.home_options); mRefreshBar = (LinearLayout) findViewById(R.id.home_refresh_bar); mJoinBar = (LinearLayout) findViewById(R.id.home_join_bar); mLaunch = (Button) findViewById(R.id.launch); mUsePwd = (CheckBox) findViewById(R.id.use_password); mUsePwd.setOnCheckedChangeListener(this); mRefresh.setOnClickListener(this); mOptions.setOnClickListener(this); mLaunch.setOnClickListener(this);
效果
PreferenceActivity 自定义title栏出错
http://www.cnblogs.com/slider/archive/2011/11/11/2245149.html
开发WFD过程中也遇到这个"PreferenceActivity 自定义title栏出错"的问题。
经分析,主要原因是因为PreferenceActivity 跟一般Activity不同. PreferenceActivity 的onCreate方法里面执行了setContentView, 而这个方法必须在
requestWindowFeature之后执行。 反映到我们继承自PreferenceActivity 的具体代码中就是, requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)要在super.onCreate(savedInstanceState)前执行
代码如下
public class SettingsActivity extends PreferenceActivity implements Preference.OnPreferenceChangeListener { public static final String KEY_USERNAME = "username"; private EditTextPreference mUsername; @Override protected void onCreate(Bundle savedInstanceState) { // 注意, PreferenceActivity // 里面需要把这个放在super.onCreate(savedInstanceState)前面!!! requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.settings_custom_title); mUsername = (EditTextPreference) findPreference(KEY_USERNAME); mUsername.setSummary(getUsername()); mUsername.setText(getUsername()); mUsername.setOnPreferenceChangeListener(this); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { return super.onPreferenceTreeClick(preferenceScreen, preference); } private String getUsername() { String name = PrefUtil.get(this, PrefUtil.PREF_SETTINGS, KEY_USERNAME, Build.MODEL); return name; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mUsername) { String val = (String) newValue; Logger.d("val = " + val); if (val != null && !val.equals("") && !val.equals(getUsername())) { mUsername.setSummary(val); PrefUtil.set(this, PrefUtil.PREF_SETTINGS, KEY_USERNAME, mUsername.getText()); } } return false; } }
http://qing.weibo.com/2617185797/9bff160533000f4l.html?retcode=6102
最关键的位置就是在setContentView之前添加下面的这行代码
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //设置为圆形旋转进度条
或者
requestWindowFeature(Window.FEATURE_PROGRESS); //设置为水平进度条 注意标题栏的水平进度条最大值是10000,不用自己手动设置
在Activity.setCurrentView()之前调用此方法
private void hideTitle(){ //TODOAuto-generatedmethodstub requestWindowFeature(Window.FEATURE_NO_TITLE); }
在Activity.setCurrentView()之前调用此方法
private void hideStatusBar(){ //TODOAuto-generatedmethodstub // 隐藏标题 requestWindowFeature(Window.FEATURE_NO_TITLE); // 定义全屏参数 intflag=WindowManager.LayoutParams.FLAG_FULLSCREEN; // 获得窗口对象 WindowmyWindow=this.getWindow(); // 设置 Flag标识 myWindow.setFlags(flag,flag); }
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:theme="@android:style/Theme.NoTitleBar"
android:theme="@android:style/Theme.Translucent"
或者先编写一个color.xml
<?xmlversion="1.0"encoding="UTF-8"?> <resources> <colorname="transparent">#9000</color> </resources>
再编写一个styles.xml
<?xmlversion="1.0"encoding="utf-8"?> <resources> <stylename="Transparent"> <itemname="android:windowBackground">@color/transparent</item> <itemname="android:windowIsTranslucent">true</item> <itemname="android:windowAnimationStyle">@+android:style/Animation.Translucent</item> </style> </resources>
最后使用这个style
android:theme="@style/transparent"
参考http://blog.csdn.net/yuejingjiahong/article/details/6668265
android:theme="@android:style/Theme.Dialog"
/** * 切换全屏和非全屏 */ private void switchFullScreen() { if (null != switchFullScreenToast) { switchFullScreenToast.cancel(); } if (fullScreen) { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); switchFullScreenToast = Toast.makeText(this, R.string.exit_full_screen, Toast.LENGTH_SHORT); switchFullScreenToast.show(); } else { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); switchFullScreenToast = Toast.makeText(this, R.string.enter_full_screen, Toast.LENGTH_SHORT); switchFullScreenToast.show(); } fullScreen = !fullScreen; }
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="TransparentListView" parent="@android:style/Widget.ListView"> <item name="android:cacheColorHint">@android:color/transparent</item> </style> </resources>
然后使用这个style
<activity android:name=".ui.HomeActivity" android:theme="@style/CmTitleBar"></activity>