`
410063005
  • 浏览: 180012 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WindowFeature及Activity内置Theme

 
阅读更多

1. 自定义标题栏

1.1 常规自定义标题栏

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);  

效果

1.2 PreferenceActivity的自定义标题栏

 

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;  
    }  
}  
 

2. 标题栏进度条

http://qing.weibo.com/2617185797/9bff160533000f4l.html?retcode=6102

最关键的位置就是在setContentView之前添加下面的这行代码

 

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //设置为圆形旋转进度条

 

 或者

 

requestWindowFeature(Window.FEATURE_PROGRESS); //设置为水平进度条 注意标题栏的水平进度条最大值是10000,不用自己手动设置
 

 

 

3. Java代码中隐藏标题栏

在Activity.setCurrentView()之前调用此方法

 

private void hideTitle(){
//TODOAuto-generatedmethodstub
requestWindowFeature(Window.FEATURE_NO_TITLE);
}

 

4. Java代码中全屏

在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);
}

5. manifest中全屏

 

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

 

6. manifest中隐藏标题栏

 

android:theme="@android:style/Theme.NoTitleBar"

 

7. 半透明风格的Activity

 

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

8. 对话框风格的Activity

 

android:theme="@android:style/Theme.Dialog"

9. 运行时切换全屏

 

	/**
	 * 切换全屏和非全屏
	 */
	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;		
	}

  10. 使用自定义style解决自定义title栏高度太小的问题

 

<?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>
 

 

  • 大小: 36.1 KB
分享到:
评论

相关推荐

    Activity_Theme_Style.rar_activity theme_android

    在"Activity_Theme_Style.rar_activity theme_android"这个压缩包中,包含的资源可能是一个关于如何自定义和应用Android Activity主题的教程。 首先,我们来了解一下Android中的主题系统。Android提供了预定义的...

    利用Theme自定义Activity间的切换动画

    通过自定义Theme,我们可以实现Activity间切换时的动画效果,这不仅可以提升用户体验,也能让应用更具个性化和专业感。本篇将详细介绍如何利用Theme来定制Activity间的切换动画。 首先,理解Android的Theme和Style...

    完美实现将activity作为dialog弹窗进行弹出

    window.requestFeature(Window.FEATURE_NO_TITLE); // 去掉标题栏 window.setLayout(dialogWidth, dialogHeight); // 设置对话框的宽度和高度 setContentView(R.layout.activity_your); // 初始化UI及事件处理...

    Android设置theme中可能遇到的坑

    This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR 原因一 错误写法: &lt;style name=AppTheme.NoActionBar&gt; ...

    Window 内部机制(Activity+Toast)

    描述了window的基本工作原理以及 Activity 和 Toast 使用的基本实现源码大概分析

    android Activity 设置背景透明

    为了使Activity背景透明,我们需要在对应的Activity标签中添加一个特殊的主题(Theme)。Android系统提供了多种主题供开发者选择,其中包括允许Activity背景透明的选项。例如,我们可以使用`Theme.Translucent....

    去除Activity的标题,使用一句java语句

    另外,如果你的Activity不使用AppCompatActivity,而是直接继承自`Activity`,那么你需要使用`getWindow().requestFeature(Window.FEATURE_NO_TITLE)`来去除标题: ```java @Override protected void onCreate...

    Android 悬浮Activity ( Dialog风格)

    同时,为了使Activity浮现在屏幕上方,需要设置窗口类型(Window Type)为`TYPE_PHONE`或`TYPE_SYSTEM_ALERT`。 ```xml &lt;style name="AppTheme.FloatActivity" parent="Theme.AppCompat.Dialog"&gt; &lt;!-- Customize...

    随意调节你的activity的大小,activity 自定义窗口大小

    在Android系统中,WindowManager服务负责管理所有应用的窗口,而Activity实际上就是一种特殊的Window。默认情况下,Activity会全屏显示,但我们可以通过修改Activity的属性和使用自定义布局来改变这一行为。 1. ...

    activity3activity3activity3activity3activity3activity3activity3a

    标题中的"activity3activity3activity3activity3activity3activity3activity3a"看起来可能是由于重复输入造成的错误,我们可以简化为"activity3",这通常在编程或软件开发中可能代表一个特定的操作、事件或者组件。...

    Android 中从activity1跳转到activity2再回到activity所经历的生命周期

    本文将详细解析从一个Activity(Activity1)跳转到另一个Activity(Activity2),然后再返回到原Activity(Activity1)时,这两个Activity分别会经历哪些生命周期方法。 #### Activity1的生命周期变化 1. **...

    Android使用Activity用作弹出式对话框

    在`res/values/styles.xml`文件中,我们可以定义一个新的主题,例如`Theme.AppCompat.Dialog.Alert`,它会使`Activity`呈现为对话框样式。 ```xml &lt;style name="PopupTheme" parent="Theme.AppCompat.Dialog.Alert...

    背景半透明效果的Activity

    在Android开发中,实现“背景半透明效果的Activity”是一种常见的需求,它可以为用户界面增添一层优雅而现代的视觉体验。这种效果通常是通过调整Activity的窗口属性和使用自定义主题来实现的。以下将详细解释如何...

    Activity实现透明的最简洁Demo

    要实现Activity的透明效果,我们需要调整Activity的主题(Theme)和窗口(Window)属性。 1. **设置透明主题**: 在AndroidManifest.xml中,为要实现透明效果的Activity指定一个透明主题。可以创建自定义主题,...

    Android父Activity获取子Activity返回信息demo

    在Android应用开发中,Activity是构成应用程序的基本组件,它代表用户界面的一个屏幕。有时,我们需要在子Activity执行某些操作后将结果返回给父Activity。这个过程通常涉及到Intent的使用,Intent不仅用于启动新的...

    activity view window viewgroup的关系

    activity view window viewgroup的关系

    requestWindowFeature对title的设置

    例如,如果我们想禁用Activity的标题栏(Title Bar),我们可以使用`Window.FEATURE_NO_TITLE`作为`featureId`: ```java requestWindowFeature(Window.FEATURE_NO_TITLE); ``` `Window.FEATURE_NO_TITLE` 就是1,...

    Android设置Activity背景为透明style的简单方法(必看)

    方法一: 通过Theme.Translucent ...只需要在Manifest中需要透明的Activity内设置theme为以上任意一个就可以了 &lt;activity android:name=com.vixtel.simulate.MainApp android:configChanges=keyboardHidden|

    Andriod_去掉系统自带的Activity跳转动画

    其次,我们需要在AndroidManifest.xml文件中修改相应Activity的theme。下面是AndroidManifest.xml文件的内容: ```xml &lt;activity android:name=".HomeActivity" android:label="@string/app_name" android:theme=...

    android安卓app已经放弃使用Theme.Dialog,改用Theme.Holo.DialogWhenLarge

    它是一种常见的主题,用于创建看起来像是浮现在当前Activity之上的小窗口,即对话框样式。这种主题使得应用的某一部分可以以非侵入性的方式呈现,不占据整个屏幕,通常用于显示警告、设置或其他简短交互。然而,...

Global site tag (gtag.js) - Google Analytics