`
caiwb1990
  • 浏览: 314813 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义窗口标题

 
阅读更多
我们看到过很多应用,他们的窗口标题行都不是系统默认的 要么有按钮呀之类的, 具体是怎么实现的呢, 让我们一起来看看吧。

步骤:
1.提供自定义标题界面,如: R.layout.title
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="#FFFFFF"
  >
  <TextView
	  android:layout_width="wrap_content"
	  android:layout_height="wrap_content"
	  android:text="我是自定义的"
	  android:background="#FF0000"
  /></LinearLayout>

2.在Activity的onCreate()方法中添加如下代码:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);

此时的效果如下:


这时发现虽然标题有背景颜色了。 但是很明显 ,标题分为了两层。 而这时改变的背景只是前面那一部分的背景. 后一部分的还没改变.

我们可以看一下系统窗口标题的界面文件的源代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:fitsSystemWindows="true">
    <FrameLayout android:id="@android:id/title_container" 
        android:layout_width="match_parent" 
        android:layout_height="?android:attr/windowTitleSize"
        style="?android:attr/windowTitleBackgroundStyle">
    </FrameLayout>
    <FrameLayout android:id="@android:id/content"
        android:layout_width="match_parent" 
        android:layout_height="0dip"
        android:layout_weight="1"
        android:foregroundGravity="fill_horizontal|top"
        android:foreground="?android:attr/windowContentOverlay" />
</LinearLayout>

?android:attr/windowTitleSize
?android:attr/windowTitleBackgroundStyle
?android:attr/windowContentOverlay
上述属性的值为:
<style name="Theme">
  
</style>

@android:style/WindowTitleBackground:
 <style name="WindowTitleBackground">
        <item name="android:background">@android:drawable/title_bar</item>
</style>


很明显我们发现,窗口标题采用了两个帧布局进行叠加.,而我们设置背景的是在上面的比较小的一个帧布局.
那怎呢杨才能完成自定义窗口标题的背景设置呢.
我们可以让前面的背景色为透明,然后让后面的帧布局的背景色设置为我们想要的效果即可

即让  style="?android:attr/windowTitleBackgroundStyle">指向我们自定义的样式
并且让  android:foreground="?android:attr/windowContentOverlay" 改为透明色
既可以实现了

3.我们自己定义一个继承系统默认主题的主题,并且让Activity应用该主题
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<style name="mytheme" parent="android:Theme">
		<item name="android:windowContentOverlay">@color/trans</item>
		<item name="android:windowTitleSize">38dip</item>
		<item name="android:windowTitleBackgroundStyle">@style/myBackground</item>
	</style>
	<color name="trans">
		#00000000
	</color>
	<color name="mybg">#FFFF00</color>
	<style name="myBackground">
		<item name="android:background">@color/mybg</item>
	</style>
</resources>

效果如下



界面粗糙请多海涵, 需要时只需改为需要效果即可。
  • 大小: 9.8 KB
  • 大小: 9.9 KB
分享到:
评论

相关推荐

    Qt 实现 自定义窗口标题栏

    以上代码用Qt实现了自定义窗口标题栏,非常实用,提供了窗口图标、窗口标题、最小化、最大化、关闭按钮等几个部分。可以应用到每一个窗口中去,保持每个窗口外观的一致性,同时自定义的标题栏也比系统自带的漂亮很多...

    Qt 之 自定义窗口标题栏

    以上代码用Qt实现了自定义窗口标题栏,非常实用,提供了窗口图标、窗口标题、最小化、最大化、关闭按钮等几个部分。可以应用到每一个窗口中去,保持每个窗口外观的一致性,同时自定义的标题栏也比系统自带的漂亮很多...

    自定义窗口标题栏 关闭放大缩小隐藏

    本主题聚焦于使用QT C++库来实现自定义窗口标题栏的功能,包括关闭、最小化和最大化窗口的控制。QT是一个强大的跨平台应用程序开发框架,支持多种操作系统,如Windows、Linux和macOS。 首先,我们需要了解QT中的...

    Qt 之 自定义窗口的标题栏

    以上代码用Qt实现了自定义窗口标题栏,非常实用,提供了窗口图标、窗口标题、最小化、最大化、关闭按钮等几个部分。可以应用到每一个窗口中去,保持每个窗口外观 的一致性,同时自定义的标题栏也比系统自带的漂亮很...

    QT自定义窗口 自由拖动 自定义标题

    本文将深入探讨如何在QT中创建自定义窗口,并实现自由拖动和自定义标题的功能。 首先,我们需要了解QT中的QMainWindow类,它是大多数QT应用程序的基础,提供了菜单、工具栏和状态栏等标准窗口元素。然而,为了...

    C# wpf 在style中自定义标题栏及无边框窗口

    本资源实现了一种wpf在style中自定义标题栏无边框窗口的方法。style内部的实现其实没那么简单,尤其是实现按钮逻辑以及拖动逻辑,需要在style中关联cs代码,这就要求我们熟悉绑定技巧、附加属性还有ContentPresenter...

    qt5 自定义标题栏

    然而,为了自定义标题栏,我们通常需要创建一个新的QWidget作为窗口的上部,并在这个自定义的QWidget上实现标题栏的功能。 以下步骤可以帮助你创建一个自定义标题栏: 1. **创建自定义标题栏类**: 创建一个继承...

    WPF 自定义窗口风格,带TOOLBAR

    WindowStyle="None" ResizeMode="NoResize" 当设置无标题栏,无拖动边框时还可以拉抻窗口大小,并自制标题栏部分。 重构tabControl的header部分,使用togglebutton代替且支持图标+文字显示

    C# wpf style中实现可定制的自定义标题栏

    上一章我们实现了在style中自定义标题栏,解决了复用性的问题。但是在实际使用中,还是存在一些问题的,比如有些界面需要放几个菜单在标题栏或者不需要最大化按钮等,就会变得很不灵活。这时候就需要对style进行...

    android自定义窗口标题示例分享

    1、建好项目之后在它的layout文件夹下创建一个title.xml文件,作为自定义窗口标题的文件。 代码如下:&lt;?xml version=”1.0″ encoding=”utf-8″?&gt;”http://schemas.android.com/apk/res/android” android:...

    自定义winform 窗口标题栏

    自定义winform 窗口标题栏 主要代码 public partial class ZForm : Form { private bool moving = false; private Point oldMousePosition; public new FormBorderStyle FormBorderStyle { get { return ...

    自定义窗口模板_模板_窗口_WPF_zerohmk_自定义_

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)框架中实现自定义窗口模板。自定义窗口模板是创建独特、个性化用户界面的关键技术,它允许开发者跳出默认的窗口样式,为应用程序提供独一无二...

    VC++自绘制窗口标题栏、窗口背景的类

    总的来说,自定义窗口标题栏和背景涉及到了Windows编程的基本概念,如窗口过程、消息处理、设备上下文以及绘图函数。通过实践和理解这些知识点,开发者可以进一步提升在VC++中创建独特用户界面的能力。

    MFC自定义窗口形状

    在标题提到的示例中,开发者通过结合两个BMP位图文件实现了自定义窗口形状,展示了一架镂空的直升机模型。用户可以通过点击直升机区域来拖动窗口,增加了互动性和趣味性。 首先,我们需要理解Windows系统中的窗口...

    QT 自定义窗口

    在新的类中,你可以添加必要的控件,如关闭、最小化和最大化的按钮,以及窗口标题文本。 2. **布局管理**:利用QLayout对标题栏内的元素进行布局。这可以确保窗口大小变化时,标题栏内元素的位置和大小能够自动调整...

    更改标题栏背景并重写JFrame窗口

    对JFrame窗口进行了重写 最大最小化按钮可以改变(我用的是qq上的最大最小化按钮图标) 对JFrame进行更改 得到了自己想要的窗口 本窗口是用来做局域聊天窗口特别设计的 详细 内容 代码都有详细注释谢谢下载

    qt自定义标题栏文本编辑器

    在Qt5中,自定义窗口标题栏是通过重写窗口控件(如`QWidget`或`QMainWindow`)的默认行为来实现的。开发者通常会创建一个新的类,继承自Qt的窗口类,并覆盖`paintEvent()`函数来绘制自定义的标题栏。此外,还需要...

    QT实现的自定义窗口框架

    这个自定义窗口框架是利用QT库创建的一个项目,目的是实现更灵活和个性化的窗口操作功能。 首先,我们要理解QT中的窗口系统。在QT中,`QWidget`是所有图形用户界面(GUI)元素的基础类,包括窗口。`QMainWindow`是...

    WinForm 中在窗口标题栏上加按钮.zip

    在Windows Forms(WinForm)开发中,有时我们可能需要自定义窗口标题栏,例如在标题栏上添加额外的按钮功能。这个"WinForm 中在窗口标题栏上加按钮.zip"文件提供了一个示例,帮助开发者了解如何在WinForm应用程序的...

Global site tag (gtag.js) - Google Analytics