zoukankan      html  css  js  c++  java
  • Android学习笔记_34_自定义窗口标题

      1、建好项目之后在它的layout文件夹下创建一个title.xml文件,作为自定义窗口标题的文件。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/hello_world"
            android:textColor="#FF00FF"
             />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="add"
            android:text="添加" />
    
    </LinearLayout>

      2、在res/drawable文件下建立rectangle.xml文件,为窗口应用上渐变效果。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
       <!--  填充色为渐变色,不需要中间颜色startColor开始和结束的颜色.-->
        <gradient
            android:angle="270"      
            android:endColor="#1DC9CD"
            android:startColor="#A2E0FB"/>
        <!-- 定义内间距 -->
        <padding
            android:left="2dp"
            android:top="2dp"
            android:right="2dp"
            android:bottom="2dp" />
    
    </shape>

      3、布局文件:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Button" />
    
    </RelativeLayout>

      4、通过activity后台代码进行自定义窗口设置。

    package com.example.customertitle;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.view.Window;
    import android.widget.Toast;
    
    //自定义标题
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 1.设置使用自定义窗口
            requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
            setContentView(R.layout.activity_main);
            // 2.给窗口引入自定义标题的xml界面文件
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
        }
    
        public void add(View v) {
            Toast.makeText(this, "按钮被点击", Toast.LENGTH_LONG).show();
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }

      5、部署项目,可以显示自定义的窗口标题。可是自定义的窗口标题距离界面左右两端有一点距离,并没有完全覆盖。为了解决这一个问题,需要覆盖android的窗口标题。下面是android窗口标题的源码。

    <!--2. 注意: 系统窗口的界面文件在Android系统源代码android-sdk-windowsplatformsandroid-8data
    eslayout下的screen_custom_title.xml,内容如下:
               1.一个线性布局-->
     <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    
        android:orientation="vertical"
    
        android:fitsSystemWindows="true">
    <!--2.两个帧布局. -->
        <FrameLayout android:id="@android:id/title_container" 
    <!--宽度使用父元素的.-->
            android:layout_width="match_parent" 
    <!--高度使用"?android:attr/windowTitleSize"系统的一个属性的值.-->
            android:layout_height="?android:attr/windowTitleSize"
    <!--这里还应用了一个样式,这个样式也是使用的系统的一个值.
     这里用了一个样式,这个是在windowTitleBackgroundStyle
    系统的默认主题里指定的.-->
            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" />
    <!--3.这两个帧布局的关系,第二个会叠加在第一个帧布局的上面.-->
     </LinearLayout>
    <!--这里要解决,图片的两端有空白的地方的做法是:让第二个帧布局变成透明的,第二个
     利用上次做的背景图.-->
    ?android:attr/windowTitleSize
    
    ?android:attr/windowTitleBackgroundStyle
    
    ?android:attr/windowContentOverlay
    
    上述属性的值在android-sdk-windowsplatformsandroid-8data
    esvalues下的themes.xml文件中定义:
    
       <style name="Theme">
    
           <itemname="windowContentOverlay">@android:drawable/title_bar_shadow</item>
    
            <itemname="windowTitleSize">25dip</item>
    
           <itemname="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item>
    
       </style>
    
     
    
    @android:style/WindowTitleBackground样式在android-sdk-windowsplatformsandroid-8data
    esvalues下的styles.xml文件中定义:
    
       <style name="WindowTitleBackground">
    
            <itemname="android:background">@android:drawable/title_bar</item>
    
       </style>

      通过上述可以知道android的主题样式,现在需要继承重写它的样式,代码如下

    <resources xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- 定义一个样式,覆盖原有主题样式  -->
        <style name="myTheme" parent="android:Theme">
            <item name="android:windowContentOverlay">@drawable/color</item>
            <item name="android:windowTitleSize">50dp</item>
            <item name="android:windowTitleBackgroundStyle">@style/textViewBg</item>
        </style>
    
        <style name="textViewBg">
            <item name="android:background">@drawable/rectangle</item>
        </style>
    </resources>

      颜色值的定义

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <string name="app_name">CustomerTitle</string>
        <string name="action_settings">Settings</string>
        <string name="hello_world">自定义标题</string>
        <drawable name="color">#00000000</drawable>
    </resources>
  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/lbangel/p/3475158.html
Copyright © 2011-2022 走看看