【Android UI】自定义带按钮的标题栏

简介: 【Android UI】自定义带按钮的标题栏

自定义标题栏在很多的android app中很常见,可以说是一种很有用的UI设计方法。自

己也本着学习的态度,经过一番各种坑,终于实现了,现总结如下:

一:大致流程

1.      对指定的android activity设置自定义主题风格,其中自定义主题风格是关键

在android 4.0以上版本中如果使用Theme.Holo或者Theme.Light等,程序会


一直报错误-you cannot combine custom title with other feature titles


2.      在对应的Activity中加入代码

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.mycustomtitle);

3.      在styles.xml使用如下的自定义主题,发现只有使用这个默认主题才不出第一步的

错误,真是各种坑啊!

<resources>
 
    <style name="WindowTitleBackground" >   
        <item name="android:background">@color/blue</item>       
    </style>
    <style name="MyTheme" parent="android:Theme">
        <item name="android:windowTitleSize">60dp</item>
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>                
    </style>
 
</resources>

4.      关键技巧,使用RelativeLayout来对齐自定义Title的组件

二:测试MainActivity源代码

package com.gloomyfish.titledemo;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.mycustomtitle);
    }
    
}

三:XML资源文件

mycustomtitle.xml的内容

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_gravity="fill_horizontal"
    android:orientation="horizontal"
    android:layout_height="fill_parent" >
    <Button  android:id="@+id/header_left_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="5dp"
        android:layout_centerVertical="true"
        android:text="返回"
        android:textColor="#000000"/>
    
        <TextView android:id="@+id/header_text"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@+id/header_left_btn"
            android:layout_toLeftOf="@+id/header_right_btn"
            android:text="My Title Bar"
            android:textSize="20sp"
            android:textStyle="bold"
            android:textColor="#FFFFFF"
            android:gravity="center"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:singleLine="true" />
           
        <Button  android:id="@+id/header_right_btn"
            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="5dp"
             android:layout_centerVertical="true"
             android:text="图片"  
             android:textColor="#000000"/>
 
</RelativeLayout>

最后别忘记在androi的manifest配置文件中加上自定义的主题

android:theme="@style/MyTheme"

同时还要删除IDE默认生成的那些appTheme,不然也会一直报错!

最终效果如下:

实现这个自定义标题栏的时候,看到stackoverflow上面说

如果使用Theme.Holo一定要换成Theme.Holo.NoActionBar主题

可以我换了以后发现,还是各种坑,一直不出效果。

所以我推荐一定要使用android:theme

相关文章
|
2天前
|
搜索推荐 数据库 Android开发
自定义头像 Android
【6月更文挑战第16天】
|
5天前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
11天前
|
存储 Android开发
安卓app,MediaPlayer播放本地音频 | 按钮控制播放和停止
在Jetpack Compose中,不直接操作原生Android组件如`Button`和`MediaPlayer`,而是使用Compose UI构建器定义界面并结合ViewModel管理音频播放逻辑。以下示例展示如何播放本地音频并用按钮控制播放/停止:创建一个`AudioPlayerViewModel`管理`MediaPlayer`实例和播放状态,然后在Compose UI中使用`Button`根据`isPlaying`状态控制播放。记得在`MainActivity`设置Compose UI,并处理相关依赖和权限。
|
15天前
|
XML Android开发 数据格式
【Android UI】使用RelativeLayout与TableLayout实现登录界面
【Android UI】使用RelativeLayout与TableLayout实现登录界面
24 5
|
15天前
|
XML API Android开发
android上FragmentTabHost实现自定义Tab Indicator
android上FragmentTabHost实现自定义Tab Indicator
15 1
|
15天前
|
XML 前端开发 API
Android中实现Bitmap在自定义View中的放大与拖动
Android中实现Bitmap在自定义View中的放大与拖动
37 1
|
1天前
|
开发工具 Android开发
Android 代码自定义drawble文件实现View圆角背景
Android 代码自定义drawble文件实现View圆角背景
10 0
|
1天前
|
Android开发
Android 自定义View 测量控件宽高、自定义viewgroup测量
Android 自定义View 测量控件宽高、自定义viewgroup测量
8 0
|
1天前
|
开发工具 Android开发 git
Android自定义View——可以设置最大宽高的FrameLayout
Android自定义View——可以设置最大宽高的FrameLayout
13 0
|
Android开发
Android Studio 自定义设置注释模板
Android Studio 自定义设置注释模板
401 0
Android Studio 自定义设置注释模板