精华内容
下载资源
问答
  • 自定义标题栏

    2021-04-05 07:43:38
    作者loveuqian,源码WSFSlideTitlesView,自定义标题栏 公司项目中多处用到了这种标题栏,于是就把写好的代码封装起来,方便多次复用 原理为通过一个保存好样式参数的 setting 对象创建一个 view setting 对象内有...
  • Android自定义标题栏

    2016-08-06 15:18:35
    Android自定义标题栏
  • WPF 自定义标题栏 自定义菜单栏

    千次阅读 2018-09-25 08:55:00
    原文:WPF 自定义标题栏 自定义菜单栏 自定义标题栏 自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果。但是ListBox是不能设置默认选中状态的。 而我们需要一些复杂的UI效果,还是直接自定义控件...
    原文: WPF 自定义标题栏 自定义菜单栏

    自定义标题栏

    自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果。但是ListBox是不能设置默认选中状态的。

    而我们需要一些复杂的UI效果,还是直接自定义控件来的快

     

    GitHub下载地址:https://github.com/Kybs0/MenuListControl

    一、设计界面样式

    <UserControl x:Class="WpfApplication6.TitleListControl"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="200" d:DesignWidth="800" Loaded="TitleListControl_OnLoaded" >
        <UserControl.Resources>
            <Style x:Key="FirstButtonStyle" TargetType="RadioButton">
                <Setter Property="Margin" Value="0.5,2"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type RadioButton}">
                            <Grid>
                                <Border x:Name="ButtonBorder" Height="35" Width="100" Background="#FF286E9E" CornerRadius="15,0,0,15"></Border>
                                <TextBlock Text="{TemplateBinding Content}" Foreground="White" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsChecked" Value="True">
                                    <Setter TargetName="ButtonBorder" Property="Background" Value="DeepSkyBlue"></Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style TargetType="RadioButton">
                    <Setter Property="Margin" Value="0.5,2"></Setter>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type RadioButton}">
                                <Grid>
                                    <Border x:Name="ButtonBorder" Height="35" Width="100" Background="#FF286E9E"></Border>
                                    <TextBlock Text="{TemplateBinding Content}" Foreground="White" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
                                </Grid>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsChecked" Value="True">
                                        <Setter TargetName="ButtonBorder" Property="Background" Value="DeepSkyBlue"></Setter>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            <Style x:Key="LastButtonStyle" TargetType="RadioButton">
                    <Setter Property="Margin" Value="0.5,2"></Setter>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type RadioButton}">
                                <Grid>
                                    <Border x:Name="ButtonBorder" Height="35" Width="100" Background="#FF286E9E" CornerRadius="0,15,15,0"></Border>
                                    <TextBlock Text="{TemplateBinding Content}" Foreground="White" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
                                </Grid>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsChecked" Value="True">
                                        <Setter TargetName="ButtonBorder" Property="Background" Value="DeepSkyBlue"></Setter>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
        </UserControl.Resources>
        <Grid>
            <Border x:Name="ControlBorder" VerticalAlignment="Center" HorizontalAlignment="Center" CornerRadius="16,16,16,16">
                <Border.Background>
                    <LinearGradientBrush StartPoint="0,1" EndPoint="1,1">
                        <GradientStop Color="White" Offset="0.2"></GradientStop>
                        <GradientStop Color="DeepSkyBlue" Offset="1"></GradientStop>
                    </LinearGradientBrush>
                </Border.Background>
                <StackPanel x:Name="SpTitleList" Orientation="Horizontal" Background="Transparent" Margin="2,0">
                </StackPanel>
            </Border>
        </Grid>
    </UserControl>
    View Code

     二、控件后台代码

    public partial class TitleListControl : UserControl
        {
            public TitleListControl()
            {
                InitializeComponent();
            }
            /// <summary>
            /// get or set the items
            /// </summary>
            public List<TitleListItemModel> TitleListItems
            {
                get { return (List<TitleListItemModel>) GetValue(TitleListItemsProperty); }
                set{SetValue(TitleListItemsProperty,value);}
            }
    
            public static readonly DependencyProperty TitleListItemsProperty = DependencyProperty.Register("TitleListItems", typeof(List<TitleListItemModel>),
                typeof(TitleListControl),new PropertyMetadata(new List<TitleListItemModel>()));
    
            public UIElementCollection Items
            {
                get { return SpTitleList.Children; }
            }
    
            private void TitleListControl_OnLoaded(object sender, RoutedEventArgs e)
            {
                if (TitleListItems!=null)
                {
                    var items = TitleListItems;
                    int index = 0;
                    foreach (var item in items)
                    {
                        var radiaoButton=new RadioButton()
                        {
                            Content = item.Name
                        };
    
                        if (index == 0)
                        {
                            radiaoButton.Style = GetStyle("first");
                        }
                        else if (index == items.Count - 1)
                        {
                            radiaoButton.Style = GetStyle("last");
                        }
                        item.Index = index;
                        radiaoButton.DataContext = item;
    
                        radiaoButton.Checked += ToggleButton_OnChecked;
    
                        SpTitleList.Children.Add(radiaoButton);
                        index++;
                    }
                }
            }
    
            private Style GetStyle(string type)
            {
                Style style = null;
                switch (type)
                {
                    case "first":
                    {
                        style = this.Resources["FirstButtonStyle"] as Style;
                    }
                        break;
                    case "last":
                    {
                        style = this.Resources["LastButtonStyle"] as Style;
                    }
                        break;
                }
                return style;
            }
    
            private void ToggleButton_OnChecked(object sender, RoutedEventArgs e)
            {
                var radioButton=sender as RadioButton;
                var dataModel=radioButton.DataContext as TitleListItemModel;
                int index = dataModel.Index;
                int count = SpTitleList.Children.Count;
                var linerBrush = new LinearGradientBrush(){StartPoint=new Point(0,1),EndPoint = new Point(1,1)};
                if (index==0)
                {
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.White,
                        Offset = 0.2
                    });
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.DeepSkyBlue,
                        Offset = 1
                    });
                }
                else if (index == count - 1)
                {
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.DeepSkyBlue,
                        Offset = 0
                    });
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.White,
                        Offset = 0.8
                    });
                }
                else
                {
                    double offsetValue = Convert.ToDouble(index) / count;
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.DeepSkyBlue,
                        Offset = 0
                    });
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.White,
                        Offset = offsetValue
                    });
                    linerBrush.GradientStops.Add(new GradientStop()
                    {
                        Color = Colors.DeepSkyBlue,
                        Offset = 1
                    });
                }
                ControlBorder.Background = linerBrush;
            }
        }
    
        public class TitleListItemModel
        {
            public int Index { get; set; }
            public string Name { get; set; }
            public string Remark { get; set; }
        }
    View Code

    三、引用UserControl

    <Window x:Class="WpfApplication6.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:wpfApplication6="clr-namespace:WpfApplication6"
            Title="MainWindow" Height="350" Width="800" Background="LightGray">
        <Grid>
            <wpfApplication6:TitleListControl VerticalAlignment="Center" HorizontalAlignment="Center">
                <wpfApplication6:TitleListControl.TitleListItems>
                    <wpfApplication6:TitleListItemModel Name="综合" ></wpfApplication6:TitleListItemModel>
                    <wpfApplication6:TitleListItemModel Name="语音体验" ></wpfApplication6:TitleListItemModel>
                    <wpfApplication6:TitleListItemModel Name="网页浏览"></wpfApplication6:TitleListItemModel>
                    <wpfApplication6:TitleListItemModel Name="视频播放" ></wpfApplication6:TitleListItemModel>
                    <wpfApplication6:TitleListItemModel Name="综合覆盖"></wpfApplication6:TitleListItemModel>
                    <wpfApplication6:TitleListItemModel Name="速率性能"></wpfApplication6:TitleListItemModel>
                    <wpfApplication6:TitleListItemModel Name="网络延时"></wpfApplication6:TitleListItemModel>
                </wpfApplication6:TitleListControl.TitleListItems>
            </wpfApplication6:TitleListControl>
        </Grid>
    </Window>
    View Code

     如需要控件的SelectionChanged方法,在UserControl中添加个委托或者注册一个事件即可。

    展开全文
  • WFP_自定义标题栏.zip

    2021-08-05 14:41:09
    自定义标题栏,重写标题栏样式,看起来还不错,自己还可以继续修改
  • ios 自定义标题栏状态栏
  • android自定义标题栏.pdf
  • android 自定义标题栏.pdf
  • Qt 之自定义界面(添加自定义标题栏

    万次阅读 多人点赞 2016-01-21 14:58:12
    自定义标题栏后,所有的控件我们都可以定制,比如:在标题栏中添加换肤、设置按钮以及其他控件。简述 效果 自定义标题栏 实现 接口说明 使用方式 效果自定义标题栏实现title_bar.h#ifndef TITLE_BAR #define TITLE_...

    简述

    通过上节内容,我们实现了自定义窗体的移动,但是我们缺少一个标题栏来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭的按钮。

    自定义标题栏后,所有的控件我们都可以定制,比如:在标题栏中添加换肤、设置按钮以及其他控件。

    | 版权声明:一去、二三里,未经博主允许不得转载。

    效果

    这里写图片描述

    自定义标题栏

    实现

    title_bar.h

    #ifndef TITLE_BAR
    #define TITLE_BAR
    
    #include <QWidget>
    
    class QLabel;
    class QPushButton;
    
    class TitleBar : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit TitleBar(QWidget *parent = 0);
        ~TitleBar();
    
    protected:
    
        // 双击标题栏进行界面的最大化/还原
        virtual void mouseDoubleClickEvent(QMouseEvent *event);
    
        // 进行鼠界面的拖动
        virtual void mousePressEvent(QMouseEvent *event);
    
        // 设置界面标题与图标
        virtual bool eventFilter(QObject *obj, QEvent *event);
    
    private slots:
    
        // 进行最小化、最大化/还原、关闭操作
        void onClicked();
    
    private:
    
        // 最大化/还原
        void updateMaximize();
    
    private:
        QLabel *m_pIconLabel;
        QLabel *m_pTitleLabel;
        QPushButton *m_pMinimizeButton;
        QPushButton *m_pMaximizeButton;
        QPushButton *m_pCloseButton;
    };
    
    #endif // TITLE_BAR

    title_bar.cpp

    #include <QLabel>
    #include <QPushButton>
    #include <QHBoxLayout>
    #include <QEvent>
    #include <QMouseEvent>
    #include <QApplication>
    #include "title_bar.h"
    
    #ifdef Q_OS_WIN
    #pragma comment(lib, "user32.lib")
    #include <qt_windows.h>
    #endif
    
    TitleBar::TitleBar(QWidget *parent)
        : QWidget(parent)
    {
        setFixedHeight(30);
    
        m_pIconLabel = new QLabel(this);
        m_pTitleLabel = new QLabel(this);
        m_pMinimizeButton = new QPushButton(this);
        m_pMaximizeButton = new QPushButton(this);
        m_pCloseButton = new QPushButton(this);
    
        m_pIconLabel->setFixedSize(20, 20);
        m_pIconLabel->setScaledContents(true);
    
        m_pTitleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    
        m_pMinimizeButton->setFixedSize(27, 22);
        m_pMaximizeButton->setFixedSize(27, 22);
        m_pCloseButton->setFixedSize(27, 22);
    
        m_pTitleLabel->setObjectName("whiteLabel");
        m_pMinimizeButton->setObjectName("minimizeButton");
        m_pMaximizeButton->setObjectName("maximizeButton");
        m_pCloseButton->setObjectName("closeButton");
    
        m_pMinimizeButton->setToolTip("Minimize");
        m_pMaximizeButton->setToolTip("Maximize");
        m_pCloseButton->setToolTip("Close");
    
        QHBoxLayout *pLayout = new QHBoxLayout(this);
        pLayout->addWidget(m_pIconLabel);
        pLayout->addSpacing(5);
        pLayout->addWidget(m_pTitleLabel);
        pLayout->addWidget(m_pMinimizeButton);
        pLayout->addWidget(m_pMaximizeButton);
        pLayout->addWidget(m_pCloseButton);
        pLayout->setSpacing(0);
        pLayout->setContentsMargins(5, 0, 5, 0);
    
        setLayout(pLayout);
    
        connect(m_pMinimizeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked()));
        connect(m_pMaximizeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked()));
        connect(m_pCloseButton, SIGNAL(clicked(bool)), this, SLOT(onClicked()));
    }
    
    TitleBar::~TitleBar()
    {
    
    }
    
    void TitleBar::mouseDoubleClickEvent(QMouseEvent *event)
    {
        Q_UNUSED(event);
    
        emit m_pMaximizeButton->clicked();
    }
    
    void TitleBar::mousePressEvent(QMouseEvent *event)
    {
    #ifdef Q_OS_WIN
        if (ReleaseCapture())
        {
            QWidget *pWindow = this->window();
            if (pWindow->isTopLevel())
            {
               SendMessage(HWND(pWindow->winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
        }
           event->ignore();
    #else
    #endif
    }
    
    bool TitleBar::eventFilter(QObject *obj, QEvent *event)
    {
        switch (event->type())
        {
        case QEvent::WindowTitleChange:
        {
            QWidget *pWidget = qobject_cast<QWidget *>(obj);
            if (pWidget)
            {
                m_pTitleLabel->setText(pWidget->windowTitle());
                return true;
            }
        }
        case QEvent::WindowIconChange:
        {
            QWidget *pWidget = qobject_cast<QWidget *>(obj);
            if (pWidget)
            {
                QIcon icon = pWidget->windowIcon();
                m_pIconLabel->setPixmap(icon.pixmap(m_pIconLabel->size()));
                return true;
            }
        }
        case QEvent::WindowStateChange:
        case QEvent::Resize:
            updateMaximize();
            return true;
        }
        return QWidget::eventFilter(obj, event);
    }
    
    void TitleBar::onClicked()
    {
        QPushButton *pButton = qobject_cast<QPushButton *>(sender());
        QWidget *pWindow = this->window();
        if (pWindow->isTopLevel())
        {
            if (pButton == m_pMinimizeButton)
            {
                pWindow->showMinimized();
            }
            else if (pButton == m_pMaximizeButton)
            {
                pWindow->isMaximized() ? pWindow->showNormal() : pWindow->showMaximized();
            }
            else if (pButton == m_pCloseButton)
            {
                pWindow->close();
            }
        }
    }
    
    void TitleBar::updateMaximize()
    {
        QWidget *pWindow = this->window();
        if (pWindow->isTopLevel())
        {
            bool bMaximize = pWindow->isMaximized();
            if (bMaximize)
            {
                m_pMaximizeButton->setToolTip(tr("Restore"));
                m_pMaximizeButton->setProperty("maximizeProperty", "restore");
            }
            else
            {
                m_pMaximizeButton->setProperty("maximizeProperty", "maximize");
                m_pMaximizeButton->setToolTip(tr("Maximize"));
            }
    
            m_pMaximizeButton->setStyle(QApplication::style());
        }
    }
    

    接口说明

    • mousePressEvent

    之前,我们将界面移动的事件写在主界面里面,这会有一个问题,一般情况下,是界面随着标题栏的移动而移动,而并非界面中的所有位置都可以进行拖动,所以我们将事件写在标题栏中比较合理。

    • mouseDoubleClickEvent

    双击标题栏会进行窗体的最大化/还原,所以我们需要重写此事件进行控制。

    • eventFilter

      1. 事件过滤器,这里被监听的窗体为标题栏所在的窗体,所以当窗体标题、图标等信息发生改变时,标题栏也应该随之改变。

      2. 最好不要通过直接调用接口的形式来操作对应的行为,比如:TitleBar中定义一个public函数来专门修改标题与图标,这样会造成不必要的麻烦,因为Qt本身就是基于事件的,所以此处采用过滤器的方式。

    • updateMaximize

    因为窗体大小发生变化的时候,最大化的图标、提示应该对应的发生变化,所以在eventFilter中事件触发时调用。

    使用方式

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    
        TitleBar *pTitleBar = new TitleBar(this);
        installEventFilter(pTitleBar);
    
        resize(400, 300);
        setWindowTitle("Custom Window");
        setWindowIcon(QIcon(":/Images/logo"));
    
        QPalette pal(palette());
        pal.setColor(QPalette::Background, QColor(50, 50, 50));
        setAutoFillBackground(true);
        setPalette(pal);
    
        QVBoxLayout *pLayout = new QVBoxLayout();
        pLayout->addWidget(pTitleBar);
        pLayout->addStretch();
        pLayout->setSpacing(0);
        pLayout->setContentsMargins(0, 0, 0, 0);
        setLayout(pLayout);
    }

    注意

    installEventFilter必须在setWindowTitle、setWindowIcon之前调用,因为必须先安装事件过滤器,相应事件触发时,才会进入标题栏的eventFilter事件中。

    展开全文
  • android自定义标题栏

    2015-06-03 16:19:22
    android自定义标题栏源码,自定义view
  • 主要介绍了Android中自定义标题栏样式的两种方法,同时讲解了自定义标题栏布局的实现,需要的朋友可以参考下
  • 主要介绍了Android中BaseActivity自定义标题栏,非常实用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了Android组合控件自定义标题栏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android 自定义标题栏

    千次阅读 2015-03-11 20:34:51
    开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据。本文要点: 自定义标题填充不完整 自定义标题栏返回按钮的点击事件 一、代码这里先介绍一下流程: 1. 创建一个标题...

    开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据。

    本文要点:

    1. 自定义标题填充不完整
    2. 自定义标题栏返回按钮的点击事件

    一、代码

    这里先介绍一下流程:
    1. 创建一个标题栏布局文件 mytitlebar.xml
    2. 在style.xml中创建 mytitlestyle 主题
    3. 创建类 CustomTitleBar
    4. 在需要自定义标题栏的Activity的OnCreate方法中实例化 CustomTitleBar
    5. 在 AndroidManifest.xml 对使用了自定义标题栏的Activity定义主题

    1.定义一个自定义的标题栏布局 mytitlebar.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        android:id="@+id/re_title" xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="50dp" //定义自定义标题栏的高度
        android:background="@color/start_background"
        android:orientation="horizontal">
    
        <ImageButton
            android:scaleType="fitXY"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:id="@+id/bt_back"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="@drawable/left_back"
            android:background="@color/touming"/>
        <TextView
            android:id="@+id/mytitle"
            android:layout_centerInParent="true"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"//使文字在整个标题栏的中间
            android:textColor="#fff"
            android:textSize="20dp" />
    
    </RelativeLayout >

    2.在 style.xml 中创建 mytitlestyle 主题

    <resources>
        <!-- 自定义标题栏 parent="android:Theme" 这个属性必须写 -->
        <style name="mytitlestyle" parent="android:Theme">
            <!-- 设置高度,和 mytitlebar.xml中保持一致 -->
            <item name="android:windowTitleSize">50dp</item>
            <!-- 设置内填充为0 使自定义标题填充整个标题栏,否则左右两边有空隙 -->
            <item name="android:padding">0dp</item>
        </style>
    </resources>

    3.创建类 CustomTitleBar

    public class CustomTitleBar {
    
        private Activity mActivity;
        //不要使用 static 因为有三级页面返回时会报错
    
        /**
         * @param activity
         * @param title
         * @see [自定义标题栏]
         */
        public void getTitleBar(Activity activity, String title) {
            mActivity = activity;
          activity.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
          //指定自定义标题栏的布局文件
            activity.setContentView(R.layout.mytitlebar);
            activity.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
                    R.layout.mytitlebar);
    //获取自定义标题栏的TextView控件并设置内容为传递过来的字符串
            TextView textView = (TextView) activity.findViewById(R.id.mytitle);
            textView.setText(title);
            //设置返回按钮的点击事件
            ImageButton titleBackBtn = (ImageButton) activity.findViewById(R.id.bt_back);
            titleBackBtn.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                //调用系统的返回按键的点击事件
                    mActivity.onBackPressed();
                }
            });
        }
    }
    

    4.在需要自定义标题栏的Activity的OnCreate方法中实例化 CustomTitleBar,这里是food页面

    public class food extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //实例化CustomTitleBar 传递相应的参数
            CustomTitleBar ct = new CustomTitleBar();
            ct.getTitleBar(this, "美食");
            setContentView(R.layout.page_food);
        }
    }

    5.在 AndroidManifest.xml 对使用了自定义标题栏的Activity定义主题

    //省略了其余部分,android:theme="@style/mytitlestyle"这句必需写
    <activity
                android:name=".food"
                android:label="@string/activity_food"
                android:theme="@style/mytitlestyle" />

    二、总结

    使用自定义标题栏的时候,很多人会遇到填充不满,左右两边有空隙以及返回按钮点击事件不响应的问题,这里测试和总结了最为合适的方式解决。
    自定义标题栏填充不满,网上有不少解决方案,有的还比较复杂,我这里直接在定义Theme时一个属性就解决了,还比较容易理解。
    自定义标题栏返回按钮点击事件不响应或出错的问题,也是测试了网上的很多代码,用onBackPressed()最为方便,也有人使用finish(),其余的OnKeyDown之类的测试未通过。

    我的独立博客:时光无罪

    展开全文
  • 主要介绍了 Android 自定义标题栏的实例详解的相关资料,希望通过本文能帮助到大家,让大家实现这样类似的功能,需要的朋友可以参考下
  • 主要介绍了Android实现自定义标题栏的方法,需要的朋友可以参考下
  • Android-自定义标题栏.pdf
  • 初学者项目需要,自己封装的一个qt自定义标题栏,可以直接调用。环境是vs2013+qt5.6.2,其他环境我也不知道能否使用,谨慎下载。 大部分标题栏的显示效果都放在paintEvent函数中,可以动态更改。大部分效果都写了...
  • QT快速开发自定义标题栏示例,非常简单,使用方法如下: 1、目标窗口添加标题栏、最大化最小化关闭按钮(该步最好每次使用时,从模板程序中直接复制) 2、窗口基类从QDialog改为QFramelessDialog 3、窗口构造函数中...
  • 有些时候,我们想要自定义标题栏,比如在标题栏上放个 搜索 的SearchView。 当然就是隐藏原本自带的标题栏咯,先在style.xml定义一下样式: 然后在要自定义标题栏的activity里来使用这个主题,在manifest.xml中...

    有些时候,我们想要自定义标题栏,比如在标题栏上放个 搜索 的SearchView。

    当然就是隐藏原本自带的标题栏咯,先在style.xml定义一下样式:

    然后在要自定义标题栏的activity里来使用这个主题,在manifest.xml中找到这个activity来设置theme:

    接着,在这个activity对应的layout布局文件中 放一个ToolBar组件,以此来替代自带的 主题栏:

    然后在这个activity里来设置  隐藏自带的标题栏 并 显示自己的ActionBar。

    requestWindowFeature 必须写在 setContentView的前面)

    这样就可以显示定义的ToolBar啦。

    现在我们来写一个 带搜索功能的 标题栏:

    1. 在style.xml定义样式:

    2. 在manifest.xml 找到这个activity,设置它的theme

    3. 在这个activity对应的 layout布局文件中定义一个 toolbar

    4. 在menu.xml中定义一个searchView的item

    5.在activity.java里面设置隐藏自带状态栏,显示自己的ToolBar,并在 onCreateOptionsMenu  里面设置SearchView

     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.search_menu,menu);  //search_menu是在menu里定义的,
            MenuItem item = menu.findItem(R.id.search_view_menu); //search_menu.xml的一个对应的item的id
            final SearchView searchView  = (SearchView) MenuItemCompat.getActionView(item);
            //一进入便自动获得焦点
            searchView.setIconified(false);
            //true为让SearchView显示为一个 搜索图标,点击才展开输入框
            searchView.setIconifiedByDefault(false);
            //显示提交按钮
            searchView.setSubmitButtonEnabled(true); 
            searchView.setQueryHint("输入关键字搜索");//显示提示
            //设置SearchView的 EditTxt, search_src_text为自带的id标志
            SearchView.SearchAutoComplete st = searchView.findViewById(R.id.search_src_text);
            st.setHintTextColor(getResources().getColor(android.R.color.white)); //设置银色
            st.setTextColor(getResources().getColor(android.R.color.white));
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) { //搜索提交
                    key = query;
                    mBookInfos.clear();
                    search(query);
                    return false;
                }
                @Override
                public boolean onQueryTextChange(String newText) {
                    return false;
                }
            });
            return super.onCreateOptionsMenu(menu);
        }

    emm,就这样就可以啦

    展开全文
  • qt5 自定义标题栏

    2015-03-20 18:16:39
    用qt5写的自定义标题栏,做相应的改变也可以在其他版本运行,去掉了系统默认的标题栏,自己实现关闭,最大化,最小化,双击最大化最小化功能,这对标题栏的美化有帮助
  • Qt隐藏系统标题栏,使用自定义标题栏

    千次阅读 多人点赞 2020-09-23 18:23:22
    今天我们来实现自定义标题栏的实现,这里面用到了布局,鼠标事件重写等知识点,首先还是自定义标题栏的创作,像下面这样,可放大,可缩小,并且随着窗体大小的改变,控件做自适应调整。有没有感觉狗子的界面做的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,677
精华内容 41,070
关键字:

自定义标题栏