精华内容
下载资源
问答
  • 我有一个包含drawable和text的按钮.我希望按钮的背景与提供的正常背景不同(最好...我试图在一个带有定义颜色的drawable文件夹中创建一个选择器(在处理按钮文本时效果很好),如下所示:并将此xml设置为android:backgr...

    我有一个包含drawable和text的按钮.我希望按钮的背景与提供的正常背景不同(最好是纯色).这很好用,我只是在

    XML文件中使用android:background属性并相应地分配颜色.但是,我希望背景在选择或聚焦时变为不同的颜色(状态选择器).

    我试图在一个带有定义颜色的drawable文件夹中创建一个选择器(在处理按钮文本时效果很好),如下所示:

    并将此xml设置为android:background属性,如下所示:

    android:background="@drawable/button_state"

    但这导致一个力量关闭说明:

    Caused by: android.content.res.Resources$NotFoundException: File res/drawable/button_state.xml from drawable resource ID #0x7f020070

    但资源就在那里.你能不自定义背景状态?如果可以,怎么样?或者我做错了什么?谢谢您的帮助!

    展开全文
  • 如何设置自定义按钮的样式

    万次阅读 2007-07-13 13:11:00
    MFC编程中系统提供的一些样式,一般都比较难看,所以有的时候为了美观,需要自己定义些样式,现那Button按钮来举例.首先新建一名为XPButton的MFC Application的对话框应用程序,在Class View中新增加一个自定义样式的MFC ...
     
    
    MFC编程中系统提供的一些样式,一般都比较难看,所以有的时候为了美观,需要自己定义些样式,现那Button按钮来举例.
    首先新建一名为XPButton的MFC Application的对话框应用程序,在Class View中新增加一个自定义样式的MFC Class类,类名为CNewButton,基类为CButton.
    NewButton.h的代码如下:
    class CNewButton : public CButton
    {    public:
              CNewButton();
    protected:
              CPen m_BoundryPen; //按钮的外边框
    //鼠标指针置于按钮之上时按钮的内边框
              CPen m_InsideBoundryPenLeft;
              CPen m_InsideBoundryPenRight;
              CPen m_InsideBoundryPenTop;
              CPen m_InsideBoundryPenBottom;
              //按钮获得焦点时按钮的内边框
              CPen m_InsideBoundryPenLeftSel;
              CPen m_InsideBoundryPenRightSel;
              CPen m_InsideBoundryPenTopSel;
              CPen m_InsideBoundryPenBottomSel;
              //按钮的底色,包括有效和无效两种状态
              CBrush m_FillActive;
              CBrush m_FillInactive;
              //按钮的状态
              BOOL m_bOver; //鼠标位于按钮之上时该值为true,反之为flase
              BOOL m_bTracking//在鼠标按下没有释放时该值为true
              BOOL m_bSelected//按钮被按下是该值为true
              BOOL m_bFocus;     //按钮为当前焦点所在时该值为true
    public:
    protected:
         virtual voidPreSubclassWindow();
         public:
         virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
         virtual void DoGradientFill(CDC *pDC, CRect* rect);
         virtual void DrawInsideBorder(CDC *pDC, CRect* rect);
         virtual ~CNewButton();
    protected:
         afx_msg void OnMouseMove(UINT nFlags, CPoint point);
         afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
         afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);
     
         DECLARE_MESSAGE_MAP()
    };
    NewButton.cpp的代码如下:
    #include "stdafx.h"
    #include "NewButton.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    CNewButton::CNewButton() //构造函数
    {
         m_BoundryPen.CreatePen(PS_INSIDEFRAME | PS_SOLID, 1, RGB(0, 0, 0));//按钮的外边框画笔
         m_InsideBoundryPenLeft.CreatePen(PS_INSIDEFRAME | PS_SOLID, 3, RGB(61, 97, 88));     m_InsideBoundryPenRight.CreatePen(PS_INSIDEFRAME | PS_SOLID, 3, RGB(61, 137, 106));
         m_InsideBoundryPenTop.CreatePen(PS_INSIDEFRAME | PS_SOLID, 2, RGB(102, 167, 114));     m_InsideBoundryPenBottom.CreatePen(PS_INSIDEFRAME | PS_SOLID, 2, RGB(102, 167, 114));
         //按钮的背景色
         m_FillActive.CreateSolidBrush(RGB(223, 222, 236));
         m_FillInactive.CreateSolidBrush(RGB(222, 223, 236));
         m_InsideBoundryPenLeftSel.CreatePen(PS_INSIDEFRAME | PS_SOLID, 3, RGB(139, 189, 157));
         m_InsideBoundryPenTopSel.CreatePen(PS_INSIDEFRAME | PS_SOLID, 2, RGB(162, 201, 255));
         m_InsideBoundryPenRightSel.CreatePen(PS_INSIDEFRAME | PS_SOLID, 3, RGB(162, 189, 252));
         m_InsideBoundryPenBottomSel.CreatePen(PS_INSIDEFRAME | PS_SOLID, 2, RGB(162, 201, 255));
         m_bOver = m_bSelected = m_bTracking = m_bFocus = FALSE;
    }
    CNewButton::~CNewButton()
    {
         m_BoundryPen.DeleteObject();
         m_InsideBoundryPenLeft.DeleteObject();
         m_InsideBoundryPenRight.DeleteObject();
         m_InsideBoundryPenTop.DeleteObject();
         m_InsideBoundryPenBottom.DeleteObject();
         m_FillActive.DeleteObject();
         m_FillInactive.DeleteObject();
         m_InsideBoundryPenLeftSel.DeleteObject();
         m_InsideBoundryPenTopSel.DeleteObject();
         m_InsideBoundryPenRightSel.DeleteObject();
         m_InsideBoundryPenBottomSel.DeleteObject();
    }
    BEGIN_MESSAGE_MAP(CNewButton, CButton)
         ON_WM_MOUSEMOVE()
         ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
         ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
    END_MESSAGE_MAP()
     
    //添加Owner Draw属性
    void CNewButton::PreSubclassWindow()
    {
         CButton::PreSubclassWindow();
         ModifyStyle(0, BS_OWNERDRAW);
    }
    void CNewButton::OnMouseMove(UINT nFlags, CPoint point)
    {
    if (!m_bTracking)
         {
             TRACKMOUSEEVENT tme;
             tme.cbSize = sizeof(tme);
             tme.hwndTrack = m_hWnd;
             tme.dwFlags = TME_LEAVE | TME_HOVER;
             tme.dwHoverTime = 1;
             m_bTracking = _TrackMouseEvent(&tme);
         }
         CButton::OnMouseMove(nFlags, point);
    }
    LRESULT CNewButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
    {
         m_bOver = FALSE;
         m_bTracking = FALSE;
         InvalidateRect(NULL, FALSE);
         return 0;
    }
    LRESULT CNewButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
    {
         m_bOver = TRUE;
         InvalidateRect(NULL);
         return 0;
    }
    void CNewButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
         //从lpDrawItemStruct获取控件的相关信息
         CRect rectlpDrawItemStruct->rcItem;
         CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
         int nSaveDC=pDC->SaveDC();
         UINT state = lpDrawItemStruct->itemState;
         POINT pt ;
         TCHAR strText[MAX_PATH + 1];
         ::GetWindowText(m_hWnd, strText, MAX_PATH);
     
         //画按钮的外边框,它是一个半径为5的圆角矩形
         pt.x =5;
         pt.y =5;
         CPen* hOldPen = pDC->SelectObject(&m_BoundryPen);
         pDC->RoundRect(&rect, pt);
         //获取按钮的状态
         if (state & ODS_FOCUS)
         {
             m_bFocus = TRUE;       m_bSelected = TRUE;
         }
         else
         {
             m_bFocus = FALSE;      m_bSelected = FALSE;
         }
         if (state & ODS_SELECTED || state & ODS_DEFAULT)
         {
             m_bFocus = TRUE;
         }
         pDC->SelectObject(hOldPen);
         rect.DeflateRect(CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));
         //根据按钮的状态填充按钮的底色
         CBrush* pOldBrush;
         if (m_bOver)
         {
             pOldBrush = pDC->SelectObject(&m_FillActive);
             DoGradientFill(pDC, &rect);
         }
         else
         {
             pOldBrush = pDC->SelectObject(&m_FillInactive);
             DoGradientFill(pDC, &rect);
         }
         //根据按钮的状态绘制内边框
         if (m_bOver || m_bSelected)
             DrawInsideBorder(pDC, &rect);
         pDC->SelectObject(pOldBrush);
         //显示按钮的文本
         if (strText!=NULL)
         {
             CFont* hFont = GetFont();
             CFont* hOldFont = pDC->SelectObject(hFont);
             CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
         CPoint pt( rect.CenterPoint().x - szExtent.cx / 2, rect.CenterPoint().y - szExtent.cy / 2);
             if (state & ODS_SELECTED)
                  pt.Offset(1, 1);
             int nMode = pDC->SetBkMode(TRANSPARENT);
             if (state & ODS_DISABLED)
                  pDC->DrawState(pt, szExtent, strText, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
             else
                  pDC->DrawState(pt, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
             pDC->SelectObject(hOldFont);
             pDC->SetBkMode(nMode);
         }
         pDC->RestoreDC(nSaveDC);
    }
    //绘制按钮的底色
    void CNewButton::DoGradientFill(CDC *pDC, CRect* rect)
    {
         CBrush brBk[64];
         int nWidth = rect->Width();
         int nHeight = rect->Height();
         CRect rct;
         for (int i = 0; i < 64; i ++)
         {
             if (m_bOver)
             {
                  if (m_bFocus)
                       brBk[i].CreateSolidBrush(RGB(255 - (i / 4), 255 - (i / 4), 255 - (i / 3)));
                  else
                       brBk[i].CreateSolidBrush(RGB(255 - (i / 4), 255 - (i / 4), 255 - (i / 5)));
             }
             else
             {
                  if (m_bFocus)
                       brBk[i].CreateSolidBrush(RGB(255 - (i / 3), 255 - (i / 3), 255 - (i / 4)));
                  else
                       brBk[i].CreateSolidBrush(RGB(255 - (i / 3), 255 - (i / 3), 255 - (i / 5)));
             }
         }
         for (i = rect->top; i <= nHeight + 2; i ++)
         {
             rct.SetRect(rect->left, i, nWidth + 2, i + 1);
             pDC->FillRect(&rct, &brBk[((i * 63) / nHeight)]);
         }
         for (i = 0; i < 64; i ++)
             brBk[i].DeleteObject();
    }
    //绘制按钮的内边框
    void CNewButton::DrawInsideBorder(CDC *pDC, CRect* rect)
    {
         CPen *pLeft, *pRight, *pTop, *pBottom;
         if (m_bSelected && !m_bOver)
         {
             pLeft = & m_InsideBoundryPenLeftSel;
             pRight = &m_InsideBoundryPenRightSel;
             pTop = &m_InsideBoundryPenTopSel;
             pBottom = &m_InsideBoundryPenBottomSel;
         }
         else
         {
             pLeft = &m_InsideBoundryPenLeft;
             pRight = &m_InsideBoundryPenRight;
             pTop = &m_InsideBoundryPenTop;
             pBottom = &m_InsideBoundryPenBottom;
         }
         CPoint oldPoint = pDC->MoveTo(rect->left, rect->bottom - 1);
         CPen* pOldPen = pDC->SelectObject(pLeft);
         pDC->LineTo(rect->left, rect->top + 1);
         pDC->SelectObject(pRight);
         pDC->MoveTo(rect->right - 1, rect->bottom - 1);
         pDC->LineTo(rect->right - 1, rect->top);
         pDC->SelectObject(pTop);
         pDC->MoveTo(rect->left - 1, rect->top);
         pDC->LineTo(rect->right - 1, rect->top);
         pDC->SelectObject(pBottom);
         pDC->MoveTo(rect->left, rect->bottom);
         pDC->LineTo(rect->right - 1, rect->bottom);
         pDC->SelectObject(pOldPen);
         pDC->MoveTo(oldPoint);
         if (m_bSelected && !m_bOver)
             DrawFocusRect(pDC->m_hDC,rect);
    }
    3.设置某个按钮为上面所定义的样式,只需右键点击该按钮,添加变量,变量的类型CNewButton,变量名为m_Button.编译运行,就可以看到自己定义的按钮.
     
    展开全文
  • SwiftUI Toolbar如何设置自定义颜色和形状按钮 本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 掌握toolbar基础配置 掌握ToolbarItem 掌握自定义按钮 struct ShapeButton<S:...

    实战需求

    SwiftUI Toolbar如何设置自定义颜色和形状按钮

    本文价值与收获

    看完本文后,您将能够作出下面的界面

    截屏2020-09-21 下午10.15.52.png

    Jietu20200921-221638.gif

    看完本文您将掌握的技能

    • 掌握toolbar基础配置
    • 掌握ToolbarItem
    • 掌握自定义按钮
    struct ShapeButton<S:Shape>: View
    

    基础知识

    toolbar(items:)

    可将指定项目填充到工具栏或导航栏。

    func toolbar<Items>(items: () -> ToolbarItemGroup<Void, Items>) -> some View
    

    (一)ToolbarItem

    表示可放置在工具栏或导航栏中的项的模型。

    struct ToolbarItem<ID, Content> where Content : View
    

    (二)ToolbarItem 分类

    ToolbarItem

    toolbar 使用教程

    .bottomBar

    该项放置在底部工具栏中。

    static let bottomBar: ToolbarItemPlacement
    

    bottomBar 使用代码

    import SwiftUI
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                Text("SwiftUI toolbar 基础教程").padding()
                    .navigationTitle("SwiftUI")
                    .toolbar {
                        ToolbarItem(placement:.bottomBar) {
                            Button("点击我") {
                                print("Pressed")
                            }
                        }
                    }
            }
        }
    }
    

    实战代码

    import SwiftUI
    
    
    
    struct ShapeButton<S:Shape>: View {
        var shape: S
        var color: Color
        var action: () -> ()
    
        @GestureState private var tapped = false
        var body: some View {
            shape
                .fill(color).opacity(tapped ? 0.4 : 1)
                .animation(.linear(duration: 0.15), value: tapped)
                .frame(width: 18, height: 18)
                .gesture(DragGesture(minimumDistance: 0)
                    .updating($tapped) { value, state, _ in
                        state = true
                    }
                    .onEnded { _ in
                        action()
                    })
        }
    }
    
    
    struct ContentView: View {
        
        @State var tc = Color.black
        
        var body: some View {
            
            NavigationView {
                
                Text("设置自定义形状的Toolbar")
                    .foregroundColor(self.tc)
                    .toolbar {
                        
                        ToolbarItem(placement: .bottomBar) {
                            ShapeButton(shape: Rectangle(), color: .red) {
                                print(">> works")
                                self.tc = .red
                            }
                        }
                    
                        ToolbarItem(placement: .bottomBar) {
                            ShapeButton(shape: Circle(), color: .blue) {
                                print(">> works")
                                self.tc = .blue
                            }
                        }
                      
                    }
            }
        }
    }
    
    

    加入我们一起学习SwiftUI

    QQ:3365059189
    SwiftUI技术交流QQ群:518696470

    展开全文
  • 设置自定义button [_loginButton setBackgroundImage:[UIImage imageWithColor:COLOR(147,36,50,1) frameSize:CGSizeMake(view_width, 40 *kScale)] forState:UIControlStateHighlighted];

    • 首先给UIImage添加一个类目
    • 在类目中实现一个根据颜色生成图片的方法

    代码示例

    1. + (UIImage *)imageWithColor:(UIColor *)color frameSize:(CGSize)frameSize
    2. {
    3. CGFloat imageWidth = frameSize.width;
    4. CGFloat imageHeight = frameSize.height;
    5. // 开启基于位图的图形上下文
    6. UIGraphicsBeginImageContextWithOptions(frameSize, NO, 0.0);
    7. // 画一个colo颜色的矩形框
    8. [color set];
    9. UIRectFill(CGRectMake(0, 0, imageWidth, imageHeight));
    10. // 拿到图片
    11. UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    12. // 关闭上下文
    13. UIGraphicsEndImageContext();
    14. return image;
    15. }

    设置自定义button

    [_loginButton setBackgroundImage:[UIImage imageWithColor:COLOR(147,36,50,1) frameSize:CGSizeMake(view_width, 40 *kScale)] forState:UIControlStateHighlighted];
    展开全文
  • 我们可以在push的时候来设置这个自定义按钮,push有一个方法 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{} 在这个方法中viewController是push的对象 但是要判断这...
  • 我们比较容易想到的方法也许是把参数装在一个数组里面...或者你会自定义按钮,给按钮添加属性,来完成需求. 但我今天呢,要利用runtime的关联来完成传参操作; 一言不合就上代码: #import "ViewController.h" #im...
  • 在VS2005中设置WPF中自定义按钮的事件 原文:在VS2005中设置WPF中自定义按钮的事件 上篇讲了如何在Blend中绘制圆角矩形...
  • 在你看不到路的情况下,如何抹黑的走下去黑暗的莫个角落有个我一直默默的在SAP学习的路上期待那天有个伯乐能发现我的存在如何在SAP屏幕上自定义按钮?在分析单个物料的MRP数据时,例如经常会在MD04(查看MRP)及MD02...
  • 想要自定义快捷键,该怎么设置呢?下面就和小编一起来看看Word Mac版设置导航窗格的快捷键的详细教程吧!1、点击头部工具栏的“工具”选项,再点击“自定义键盘”,这时就进入到自定义快捷键的功能区了。2、选择...
  • 我新建了一个类CIconButton, //public CButton 但是,当我用class wizard向对话框类中添加成员变量时,双击列表中的...//按钮的OwnerDraw属性已设置为true 手动在对话框头文件中,将控件关联变量的类型,从C
  • 最近,在修改一个国际化项目,碰到一个上传文件的地方,要将显示为的浏览按钮修改为自定义英文的英文按钮Brows,虽说那个按钮会根据系统语言自动切换,但就是在自己电脑上看着不爽,非要改成英文。  大致思想就是...
  • <p>I wrote a module for <strong>Drupal</strong> and I have some fields (buttons, image, text).... <p>I want that some fields could be hidden for normal users and open for users when admin let. ...
  • QC如何在模块Toolbar上添加自定义按钮?这听起来是不是很新奇( ⊙o⊙ )哇 没错,接下来带你一起看看如何定制自己的按钮 1、首先,使用QC项目管理员账号进入项目,点击右上角【工具】---&gt; 【自定义】---&...
  • 2019年6月份,我曾经写过一篇文章《公众号自动回复如何设置》,当时这篇文章很受大家喜欢,粉丝们说我解答的十分详细,一年过去了,仍然有很多人加我询问相关问题,我内心备受鼓舞,我强烈的感受到,优质内容所天生...
  • 这包括使用Divi的内置选项创建自定义页眉。在本教程中,将重点介绍使用Divi的主题生成器创建全局页眉。除非你为该页面或文章分配了不同的页眉,否则全局页眉将显示在你网站上的所有位置。现在就开始吧!预览在深入...
  • 需要的效果:在下方的表格边上添加自定义按钮,必须与工具栏齐平。 解决方案:添加div(DIV是层叠样式表中的定位技术,全称DIVision,即为划分。有时可以称其为图层。),添加id=”toolbar”属性,在后面的table...
  • 我试了两种方法 方法一:定义好视屏播放窗口后,直接在视屏窗口放置按钮会造成透明按钮遮挡视屏; 方法二:设置3个窗口,底层窗口放地图,中间...两个方法都不行,请教如何解决,是我的代码设置问题还是方法问题?
  • 在office开发中,我们经常会通过自定义功能区的方式进行二次开发,比如请看一下笔者开发的一个日常使用的公文格式处理小功能如下:今天,我们就来给大家讲解一个如何给所开发的按钮设置图标哟。大家应该都知道,...
  • 求高手指教,如果能够顺便介绍一本相关的书更好!
  • 您可以设置自定义按钮的标题和图标,并添加单击事件。 例如,在工具栏上添加自定义按钮并定义单击事件,在其中显示警报消息。 &lt;%@ Page Language="C#" AutoEventWireup="true" ...
  • 大家都知道QT设计师中直接拖动的按钮是长方形带有圆角的图案,那我们如何设置自定义按钮呢 要设计一个按钮,我们必须要知道按钮有什么属性,首先,按钮必须有一个位置 第二,按钮必须有一个名称。还有当我们...
  • WPF创建自定义按钮[2]

    千次阅读 2011-11-23 10:43:37
    下面两个过程将说明如何将类似这样的行为生成到自定义按钮中。我们将从简单的属性触发器开始,然后添加事件触发 器和动画。 设置属性触发器 1. 创建新的属性触发器 :选择“glassCube”,单击 “触发器”面板中...
  • 本文价值与收获 看完本文后,您将能够作出下面的界面 一、Button基础知识 (一)什么是Button Button是触发时执行操作的控件。...(二)Button如何使用 Button是SwiftUI最常用的交互控件,下面就是Butt

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 717
精华内容 286
关键字:

如何设置自定义按钮