精华内容
下载资源
问答
  • Qt编写控件属性设计器12-用户属性

    千次阅读 2019-11-24 16:26:49
    用户属性是后面新增加的一个功能,自定义控件如果采用的Q_PROPERTY修饰的属性,会自动识别到属性栏中,这个一般称为控件属性,在组态设计软件中,光有控件本身的控件属性还是不够的,毕竟这些属性仅仅是以外观为主,...

    一、前言

    用户属性是后面新增加的一个功能,自定义控件如果采用的Q_PROPERTY修饰的属性,会自动识别到属性栏中,这个一般称为控件属性,在组态设计软件中,光有控件本身的控件属性还是不够的,毕竟这些属性仅仅是以外观为主,并不能表示某个设备的属性,所以需要除了这个控件属性以外增加用户属性来存储该控件关联的设备属性,比如设备编号、设备名称、地理位置等信息,而这些信息也要和控件属性一样,都能导入导出到xml文件,同时能支持多个用户属性,用户自己填写名字和值,名字和值都支持中文描述,在xml文件中为了区分用户属性和控件属性,特意在用户属性前面加上user-前缀来表示,这样在读取xml文件加载控件的时候,识别到user-开头的都存储到该控件的用户属性列表中。自从有了用户属性的机制,大大拓展了控件的现有功能,相当于可以绑定N个自定义的数据,而这些用户属性直接采用setProperty来设置即可,然后通过property来读取就行,为了支持中文的属性名称,需要设置属性的时候转换一下:widget->setProperty(name.toStdString().c_str(), value);

    体验地址:https://gitee.com/feiyangqingyun/QUCSDK
    https://github.com/feiyangqingyun/qucsdk

    二、实现的功能

    1. 自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个。
    2. 拖曳到画布自动生成对应的控件,所见即所得。
    3. 右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小白使用。
    4. 独创属性栏文字翻译映射机制,效率极高,可以非常方便拓展其他语言的属性栏。
    5. 所有控件的属性自动提取并显示在右侧属性栏,包括枚举值下拉框等。
    6. 支持手动选择插件文件,外部导入插件文件。
    7. 可以将当前画布的所有控件配置信息导出到xml文件。
    8. 可以手动选择xml文件打开控件布局,自动根据xml文件加载控件。
    9. 可拉动滑动条、勾选模拟数据复选框、文本框输入,三种方式来生成数据应用所有控件。
    10. 控件支持八个方位拉动调整大小,自适应任意分辨率,可键盘上下左右微调位置。
    11. 打通了串口采集、网络采集、数据库采集三种方式设置数据。
    12. 代码极其精简,注释非常详细,可以作为组态的雏形,自行拓展更多的功能。
    13. 纯Qt编写,支持任意Qt版本+任意编译器+任意系统。

    三、效果图

    在这里插入图片描述

    四、核心代码

    void frmMain::openFile(const QString &fileName)
    {
        //如果控件列表没有则不用继续
        if (ui->listWidget->count() == 0) {
            return;
        }
    
        //打开文件
        QFile file(fileName);
        if (!file.open(QFile::ReadOnly | QFile::Text)) {
            return;
        }
    
        //将文件填充到dom容器
        QDomDocument doc;
        if (!doc.setContent(&file)) {
            file.close();
            return;
        }
    
        file.close();
    
        listSelect.clear();
        listUserProperty.clear();
        xmlName = fileName;
    
        //先清空原有控件
        QList<QWidget *> widgets = ui->centralwidget->findChildren<QWidget *>();
        qDeleteAll(widgets);
        widgets.clear();
    
        //先判断根元素是否正确
        QDomElement docElem = doc.documentElement();
        if (docElem.tagName() == "canvas") {
            QDomNode node = docElem.firstChild();
            QDomElement element = node.toElement();
            while(!node.isNull()) {
                //控件名称
                QString name = element.tagName();
                //取出当前控件在控件列表中的索引,如果不存在则意味着配置文件中的该控件不存在了
                int index = listNames.indexOf(name);
                if (index < 0) {
                    continue;
                }
    
                //存储控件的坐标位置和宽度高度
                int x, y, width, height;
                //存储自定义控件属性
                QList<QPair<QString, QVariant> > propertys;
                //存储控件自定义属性
                QStringList userProperty;
    
                //节点名称不为空才继续
                if (!name.isEmpty()) {
                    //遍历节点的属性名称和属性值
                    QDomNamedNodeMap attrs = element.attributes();
                    for (int i = 0; i < attrs.count(); i++) {
                        QDomNode node = attrs.item(i);
                        QString nodeName = node.nodeName();
                        QString nodeValue = node.nodeValue();
                        //qDebug() << name << nodeName << nodeValue;
    
                        //优先取出坐标+宽高属性,这几个属性不能通过设置弱属性实现
                        if (nodeName == "x") {
                            x = nodeValue.toInt();
                        } else if (nodeName == "y") {
                            y = nodeValue.toInt();
                        } else if (nodeName == "width") {
                            width = nodeValue.toInt();
                        } else if (nodeName == "height") {
                            height = nodeValue.toInt();
                        } else if (nodeName.startsWith("user-")) {
                            //取出user-开头的自定义属性
                            nodeName = nodeName.split("-").last();
                            userProperty << QString("%1|%2").arg(nodeName).arg(nodeValue);
                        } else {
                            QVariant value = QVariant(nodeValue);
                            //为了兼容Qt4,需要将颜色值的rgba分别取出来,因为Qt4不支持16进制字符串带透明度
                            //#6422a3a9 这种格式依次为 argb 带了透明度的才需要特殊处理
                            if (nodeValue.startsWith("#") && nodeValue.length() == 9) {
                                bool ok;
                                int alpha = nodeValue.mid(1, 2).toInt(&ok, 16);
                                int red = nodeValue.mid(3, 2).toInt(&ok, 16);
                                int green = nodeValue.mid(5, 2).toInt(&ok, 16);
                                int blue = nodeValue.mid(7, 2).toInt(&ok, 16);
                                value = QColor(red, green, blue, alpha);
                            }
    
                            propertys.append(qMakePair(nodeName, value));
                        }
                    }
                }
    
                //qDebug() << name << x << y << width << height;
    
                //根据不同的控件类型实例化控件
                int countWidget = listWidgets.count();
                int countProperty = propertys.count();
                for (int i = 0; i < countWidget; i++) {
                    QString className = listWidgets.at(i)->name();
                    if (name == className) {
                        //生成对应的控件
                        QWidget *widget = createWidget(i);
                        //逐个设置自定义控件的属性
                        for (int j = 0; j < countProperty; j++) {
                            QPair<QString, QVariant> property = propertys.at(j);
                            QString name = property.first;
                            QVariant value = property.second;
                            widget->setProperty(name.toStdString().c_str(), value);
                        }
    
                        //设置控件坐标及宽高
                        widget->setGeometry(x, y, width, height);
                        //实例化选中窗体跟随控件一起
                        newSelect(widget, userProperty);
                        break;
                    }
                }
    
                //移动到下一个节点
                node = node.nextSibling();
                element = node.toElement();
            }
        }
    }
    
    void frmMain::saveFile(const QString &fileName)
    {
        //如果控件列表没有则不用继续
        if (ui->listWidget->count() == 0) {
            return;
        }
    
        QFile file(fileName);
        if (!file.open(QFile::WriteOnly | QFile::Text | QFile::Truncate)) {
            return;
        }
    
        //以流的形式输出文件
        QTextStream stream(&file);
    
        //构建xml数据
        QStringList list;
    
        //添加固定头部数据
        list << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        //添加canvas主标签,保存宽高和背景图片,还可以自行添加其他属性
        list << QString("<canvas width=\"%1\" height=\"%2\" image=\"%3\">")
             .arg(ui->centralwidget->width()).arg(ui->centralwidget->height()).arg("bg.jpg");
    
        //从容器中找到所有控件,根据控件的类名保存该类的所有属性
        QList<QWidget *> widgets = ui->centralwidget->findChildren<QWidget *>();
        foreach (QWidget *widget, widgets) {
            const QMetaObject *metaObject = widget->metaObject();
            QString className = metaObject->className();
    
            //如果当前控件的父类不是主窗体则无需导出,有些控件有子控件无需导出
            if (widget->parent() != ui->centralwidget || className == "SelectWidget") {
                continue;
            }
    
            //逐个存储自定义控件属性
            //metaObject->propertyOffset()表示当前控件的属性开始索引,0开始的是父类的属性
            QStringList values;
            int index = metaObject->propertyOffset();
            int count = metaObject->propertyCount();
            for (int i = index; i < count; i++) {
                QMetaProperty property = metaObject->property(i);
                QString nodeName = property.name();
                QVariant variant = property.read(widget);
                QString typeName = variant.typeName();
                QString nodeValue = variant.toString();
    
                //如果是颜色值则取出透明度一起,颜色值toString在Qt4中默认不转透明度
                if (typeName == "QColor") {
                    QColor color = variant.value<QColor>();
                    if (color.alpha() < 255) {
                        //Qt4不支持HexArgb格式的字符串,需要挨个取出来拼接
                        //nodeValue = color.name(QColor::HexArgb);
                        QString alpha = QString("%1").arg(color.alpha(), 2, 16, QChar('0'));
                        QString red = QString("%1").arg(color.red(), 2, 16, QChar('0'));
                        QString green = QString("%1").arg(color.green(), 2, 16, QChar('0'));
                        QString blue = QString("%1").arg(color.blue(), 2, 16, QChar('0'));
                        nodeValue = QString("#%1%2%3%4").arg(alpha).arg(red).arg(green).arg(blue);
                    }
                }
    
                //枚举值要特殊处理,需要以字符串形式写入,不然存储到配置文件数据为int
                if (property.isEnumType()) {
                    QMetaEnum enumValue = property.enumerator();
                    nodeValue = enumValue.valueToKey(nodeValue.toInt());
                }
    
                values << QString("%1=\"%2\"").arg(nodeName).arg(nodeValue);
                //qDebug() << nodeName << nodeValue << variant;
            }
    
            //找到当前控件对应的索引
            index = -1;
            count = listSelect.count();
            for (int i = 0; i < count; i++) {
                if (listSelect.at(i)->getWidget() == widget) {
                    index = i;
                    break;
                }
            }
    
            //可以用下面方法列出所有的用户属性,然后取值,本程序已经用 listUserProperty 存储了
            //qDebug() << widget->dynamicPropertyNames();
    
            //逐个存储控件的用户属性
            QStringList userProperty = listUserProperty.at(index);
            count = userProperty.count();
            for (int i = 0; i < count; i++) {
                QStringList list = userProperty.at(i).split("|");
                values << QString("user-%1=\"%2\"").arg(list.at(0)).arg(list.at(1));
            }
    
            //逐个添加界面上的控件的属性
            QString geometry = QString("x=\"%1\" y=\"%2\" width=\"%3\" height=\"%4\"").arg(widget->x()).arg(widget->y()).arg(widget->width()).arg(widget->height());
            QString str = QString("\t<%1 %2 %3/>").arg(className).arg(geometry).arg(values.join(" "));
            list << str;
        }
    
        //添加固定尾部数据
        list << "</canvas>";
    
        //写入文件
        QString data = list.join("\n");
        stream << data;
        file.close();
    }
    
    

    五、控件介绍

    1. 超过160个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt集成的控件数量。
    2. 每个类都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。qwt的控件类环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。
    3. 全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式linux等,不乱码,可直接集成到Qt Creator中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。
    4. 每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。
    5. 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。
    6. 每个控件默认配色和demo对应的配色都非常精美。
    7. 超过130个可见控件,6个不可见控件。
    8. 部分控件提供多种样式风格选择,多种指示器样式选择。
    9. 所有控件自适应窗体拉伸变化。
    10. 集成自定义控件属性设计器,支持拖曳设计,所见即所得,支持导入导出xml格式。
    11. 自带activex控件demo,所有控件可以直接运行在ie浏览器中。
    12. 集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。
    13. 所有控件最后生成一个动态库文件(dll或者so等),可以直接集成到qtcreator中拖曳设计使用。
    14. 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。
    15. 自定义控件插件开放动态库使用(永久免费),无任何后门和限制,请放心使用。
    16. 目前已提供26个版本的dll,其中包括了qt5.12.3 msvc2017 32+64 mingw 32+64 的。
    17. 不定期增加控件和完善控件,不定期更新SDK,欢迎各位提出建议,谢谢!
    18. Qt入门书籍推荐霍亚飞的《Qt Creator快速入门》《Qt5编程入门》,Qt进阶书籍推荐官方的《C++ GUI Qt4编程》。
    19. 强烈推荐程序员自我修养和规划系列书《大话程序员》《程序员的成长课》《解忧程序员》,受益匪浅,受益终生!
    20. SDK下载链接:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ 提取码:877p
    展开全文
  • android 控件属性大全

    千次阅读 2018-06-06 16:26:59
    “Android控件属性大全”: &nbsp; 关键词:android&nbsp;控件&nbsp;属性&nbsp;大全 &nbsp; &nbsp; 控件属性: android属性 android功能强大,界面华丽,但是众多的布局属性就害苦了开发者...

    “Android控件属性大全”:

     

    关键词android 控件 属性 大全

     

     

    控件属性:

    android属性

    android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,

    第一类:属性值为true或false
    android:layout_centerhrizontal  水平居中
    android:layout_centervertical   垂直居中
    android:layout_centerinparent    相对于父元素完全居中
    android:layout_alignparentbottom 贴紧父元素的下边缘
    android:layout_alignparentleft   贴紧父元素的左边缘
    android:layout_alignparentright  贴紧父元素的右边缘
    android:layout_alignparenttop    贴紧父元素的上边缘
    android:layout_alignwithparentifmissing  如果对应的兄弟元素找不到的话就以父元素做参照物
    第二类:属性值必须为id的引用名“@id/id-name”
    android:layout_below      在某元素的下方
    android:layout_above      在某元素的的上方
    android:layout_toleftof   在某元素的左边
    android:layout_torightof  在某元素的右边
    android:layout_aligntop   本元素的上边缘和某元素的的上边缘对齐
    android:layout_alignleft  本元素的左边缘和某元素的的左边缘对齐
    android:layout_alignbottom 本元素的下边缘和某元素的的下边缘对齐
    android:layout_alignright  本元素的右边缘和某元素的的右边缘对齐 

    第三类:属性值为具体的像素值,如30dip,40px
    android:layout_marginbottom       离某元素底边缘的距离
    android:layout_marginleft         离某元素左边缘的距离
    android:layout_marginright        离某元素右边缘的距离
    android:layout_margintop          离某元素上边缘的距离

    edittext的android:hint  设置edittext为空时输入框内的提示信息。
    android:gravity 
    android:gravity属性是对该view 内容的限定.比如一个button 上面的text.  你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右
    android:layout_gravity
    android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity=”right”则button靠右
    android:scaletype:
    android:scaletype是控制图片如何resized/moved来匹对imageview的size。imageview.scaletype / android:scaletype值的意义区别:
    center /center  按图片的原来size居中显示,当图片长/宽超过view的长/宽,则截取图片的居中部分显示
    center_crop / centercrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于view的长(宽)
    center_inside / centerinside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于view的长/宽
    fit_center / fitcenter  把图片按比例扩大/缩小到view的宽度,居中显示
    fit_end / fitend   把图片按比例扩大/缩小到view的宽度,显示在view的下部分位置
    fit_start / fitstart  把图片按比例扩大/缩小到view的宽度,显示在view的上部分位置
    fit_xy / fitxy  把图片不按比例扩大/缩小到view的大小显示
    matrix / matrix 用矩阵来绘制,动态缩小放大图片来显示。
    ** 要注意一点,drawable文件夹里面的图片命名是不能大写的。
    ————————————————————————————————————————————————————-
    android:id
    为控件指定相应的id
    android:text
    指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串
    android:gravity
    指定view组件的对齐方式,比如说居中,居右等位置 这里指的是控件中的文本位置并不是控件本身
    android:layout_gravity
    指定container组件的对齐方式.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为 例,android:layout_gravity=”right”则button靠右
    android:textsize
    指定控件当中字体的大小
    android:background
    指定该控件所使用的背景色,rgb命名法
    android:width
    指定控件的宽度
    android:height
    指定控件的高度
    android:layout_width
    指定container组件的宽度
    android:layout_height
    指定container组件的高度
    android:layout_weight
    view中很重要的属性,按比例划分空间
    android:padding*
    指定控件的内边距,也就是说控件当中的内容
    android:sigleline
    如果设置为真的话,则控件的内容在同一行中进行显示
    android:scaletype
    是控制图片如何resized/moved来匹对imageview的siz
    android:layout_centerhrizontal
    水平居中
    android:layout_centervertical
    垂直居中
    android:layout_centerinparent
    相对于父元素完全居中
    android:layout_alignparentbottom
    贴紧父元素的下边缘
    android:layout_alignparentleft
    贴紧父元素的左边缘
    android:layout_alignparentright
    贴紧父元素的右边缘
    android:layout_alignparenttop
    贴紧父元素的上边缘
    android:layout_alignwithparentifmissing
    如果对应的兄弟元素找不到的话就以父元素做参照物
    android:layout_below
    在某元素的下方
    android:layout_above
    在某元素的的上方
    android:layout_toleftof
    在某元素的左边
    android:layout_torightof
    在某元素的右边
    android:layout_aligntop
    本元素的上边缘和某元素的的上边缘对齐
    android:layout_alignleft
    本元素的左边缘和某元素的的左边

     

    此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

    缘对齐
    android:layout_alignbottom
    本元素的下边缘和某元素的的下边缘对齐
    android:layout_alignright
    本元素的右边缘和某元素的的右边缘对齐
    android:layout_marginbottom
    离某元素底边缘的距离
    android:layout_marginleft
    离某元素左边缘的距离
    android:layout_marginright
    离某元素右边缘的距离
    android:layout_margintop
    离某元素上边缘的距离
    android:paddingleft
    本元素内容离本元素右边缘的距离
    android:paddingright
    本元素内容离本元素上边缘的距离
    android:hint
    设置edittext为空时输入框内的提示信息
    android:linearlayout
    它确定了linearlayout的方向,其值可以为vertical, 表示垂直布局horizontal, 表示水平布局

    —————————————————————————————————————————————————–
    android:interpolator
    可能有很多人不理解它的用法,文档里说的也不太清楚,其实很简单,看下面:interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用 interpolator 控制。interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。interpolator 是基类,封装了所有 interpolator 的共同方法,它只有一个方法,即 getinterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。android 提供了几个 interpolator 子类,实现了不同的速度曲线,如下:
    acceleratedecelerateinterpolator        在动画开始与介绍的地方速率改变比较慢,在中间的时侯加速
    accelerateinterpolator        在动画开始的地方速率改变比较慢,然后开始加速
    cycleinterpolator        动画循环播放特定的次数,速率改变沿着正弦曲线
    decelerateinterpolator        在动画开始的地方速率改变比较慢,然后开始减速
    linearinterpolator        在动画的以均匀的速率改变
    对于 linearinterpolator ,变化率是个常数,即 f (x) = x.
    public float getinterpolation(float input) {
    return input;
    }
    interpolator其他的几个子类,也都是按照特定的算法,实现了对变化

     

    此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

    率。还可以定义自己的 interpolator 子类,实现抛物线、自由落体等物理效果。 

     

     

     

     

    textview属性汇总

    android:autolink设置是否当文本为url链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)

    android:autotext如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。

    android:buffertype指定gettext()方式取得的文本类别。选项editable 类似于stringbuilder可追加字符,也就是说gettext后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里1、这里2。

    android:capitalize设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见editview此属性说明。

    android:cursorvisible设定光标为显示/隐藏,默认显示。

    android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()”

    android:drawablebottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。

    android:drawableleft在text的左边输出一个drawable,如图片。

    android:drawablepadding设置text与drawable(图片)的间隔,与drawableleft、 drawableright、drawabletop、drawablebottom一起使用,可设置为负数,单独使用没有效果。

    android:drawableright在text的右边输出一个drawable。

    android:drawabletop在text的正上方输出一个drawable。

    android:editable设置是否可编辑。

    android:editorextras设置文本的额外的输入数据。

    android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:”start”—-省略号显示在开头;”end” ——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)

    android:freezestext设置保存文本的内容以及光标的位置。

    android:gravity设置文本位置,如设置成“center”,文本将居中显示。

    android:hinttext为空时显示的文字提示信息,可通过textcolorhint设置提示信息的颜色。此属性在 editview中使用,但是这里也可以用。

    android:imeoptions附加功能,设置右下角ime动作与编辑框相关的动作,如actiondone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在editview中再详细说明,此处无用。

    android:imeactionid设置ime动作id。

    android:imeactionlabel设置ime动作标签。

    android:includefontpadding设置文本是否包含顶部和底部额外空白,默认为true。

    android:inputmethod为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。

    android:inputtype设置文本的类型,用于帮助输入法显示合适的键盘类型。在editview中再详细说明,这里无效果。

    android:linksclickable设置链接是否点击连接,即使设置了autolink。

    android:marqueerepeatlimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。

    android:ems设置textview的宽度为n个字符的宽度。这里测试为一个汉字字符宽度

    android:maxems设置textview的宽度为最长为n个字符的宽度。与ems同时使用时覆盖ems选项。

    android:minems设置textview的宽度为最短为n个字符的宽度。与ems同时使用时覆盖ems选项。

    android:maxlength限制显示的文本长度,超出部分不显示。

    android:lines设置文本的行数,设置两行就显示两行,即使第二行没有数据。

    android:maxlines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。

    android:minlines设置文本的最小行数,与lines类似。

    android:linespacingextra设置行间距。

    android:linespacingmultiplier设置行间距的倍数。如”1.2”

    android:numeric如果被设置,该textview有一个数字输入法。此处无用,设置后唯一效果是textview有点击效果,此属性在edtiview将详细说明。

    android:password 以小点”.”显示文本

    android:phonenumber设置为电话号码的输入方式。

    android:privateimeoptions设置输入法选项,此处无用,在edittext将进一步讨论。

    android:scrollhorizontally设置文本超出textview的宽度的情况下,是否出现横拉条。

    android:selectallonfocus如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。 textview中设置后无效果。

    android:shadowcolor指定文本阴影的颜色,需要与shadowradius一起使用。

    android:shadowdx设置阴影横向坐标开始位置。

    android:shadowdy设置阴影纵向坐标开始位置。

    android:shadowradius设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。

    android:singleline设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text=”test_ singleline ”

    android:singleline=”true” android:layout_width=”20dp”将只显示“t…”。如果不设置singleline或者设置为false,文本将自动换行

    android:text设置显示文本.

    android:textappearance设置文字外观。如 “?android:attr/textappearancelargeinverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可textappearancebutton/textappearanceinverse/textappearancelarge/textappearancelargeinverse/textappearancemedium/textappearancemediuminverse/textappearancesmall/textappearancesmallinverse

    android:textcolor设置文本颜色

    android:textcolorhighlight被选中文字的底色,默认为蓝色

    android:textcolorhint设置提示信息文字的颜色,默认为灰色。与hint一起使用。

    android:textcolorlink文字链接的颜色.

    android:textscalex设置文字之间间隔,默认为1.0f。

    android:textsize设置文字大小,推荐度量单位”sp”,如”15sp”

    android:textstyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开

    android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3]

    android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)

    android:maxheight设置文本区域的最大高度

    android:minheight设置文本区域的最小高度

    android:width设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width 的区别看这里。

    android:maxwidth设置文本区域的最大宽度

    android:minwidth设置文本区域的最小宽度

     

    android activity属性汇总

    android:allowtaskreparenting

    是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。

    android:alwaysretaintaskstate

    是否保留状态不变, 比如切换回home, 再从新打开, activity处于最后的状态

    android:cleartaskonlanunch

    比如 p 是 activity, q 是被p 触发的 activity, 然后返回home, 从新启动 p,是否显示 q

    android:configchanges

    当配置list发生修改时,是否调用 onconfigurationchanged() 方法 比如 “locale|navigation|orientation”.

    android:enabled

    activity 是否可以被实例化,

    android:excludefromrecents

    是否可被显示在最近打开的activity列表里

    android:exported

    是否允许activity被其它程序调用

    android:finishontasklaunch

    是否关闭已打开的activity当用户重新启动这个任务的时候

    android.icon

    android:label

    android:launchmode

    activity启动方式, “standard” “singletop” “singletask” “singleinstance”

    其中前两个为一组, 后两个为一组

    android:multiprocess

    允许多进程

    android:name

    activity的类名, 必须指定

    androidnhistory

    是否需要移除这个activity当用户切换到其他屏幕时。这个属性是 api level 3 中引入的

    android:permission

    android:process

    一 个activity运行时所在的进程名,所有程序组件运行在应用程序

     

    此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

    认的进程中,这个进程名跟应用程序的包名一致。中的元素process属性能够为所有组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。 如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。如果这个进程名以小写字母开头,这个activity将会运行在全局的进程中,被它的许可所提供。

     

    android:screenorientation

    activity显示的模式, “unspecified” 默认值 “landscape” 风景画模式,宽度比高度大一些 “portrait” 肖像模式, 高度比宽度大。 “user” 用户的设置 “behind” “sensor” “nosensor”

    android:statenotneeded

    是否 activity被销毁和成功重启并不保存状态

    android:taskaffinity

    activity的亲属关系, 默认情况同一个应用程序下的activity有相同的关系

    android:theme

    activity的样式主题, 如果没有设置,则activity的主题样式从属于应用程序,参见元素的theme属性

    android:windowsoftinputmode

    activity主窗口与软键盘的交互模式, 自从api level 3 被引入

    活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:

    1>     软键盘的状态——是否它是隐藏或显示——当活动(activity)成为用户关注的焦点。

    2>     活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。

    它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如: <activity android:windowsoftinputmode=”statevisible|adjustresize” . . . >

    在这设置的值(除”stateunspecified”和”adjustunspecified”以外)将覆盖在主题中设置的值

    值 描述

     “stateunspecified” 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件其他 盘行为默认的设置。

     

    “stateunchanged” 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

     “statehidden” 当用户选择该activity时,软键盘被隐藏——也就是,当用户确定导航到该activity时,而不是返回到它由于离开另一个activity。

     “statealwayshidden” 软键盘总是被隐藏的,当该activity主窗口获取焦点时。

     “statevisible” 软键盘是可见的,当那个是正常合适的时(当用户导航到activity主窗口时)。

     “statealwaysvisible” 当用户选择这个activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该activity时,而不是返回到它由于离开另一个activity。

     

    “adjustunspecified” 它不被指定是否该activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

     

    “adjustresize” 该activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。

     

    “adjustpan” 该activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

     

    android edittext 属性汇总

    android:layout_gravity=”center_vertical”

    设置控件显示的位置:默认top,这里居中显示,还有bottom

    android:hint=”请输入数字!”

    设置显示在空间上的提示信息

    android:numeric=”integer”

    设置只能输入整数,如果是小数则是:decimal

    android:singleline=”true”

    设置单行输入,一旦设置为true,则文字不会自动换行。

    android:password =”true”

    设置只能输入密码

    android:textcolor = ”#ff8c00”

    字体颜色

    android:textstyle=”bold”

    字体,bold, italic, bolditalic

    android:textsize=”20dip”

    大小

    android:capitalize = “characters”

    以大写字母写

    android:textalign=”center”

    edittext没有这个属性,但textview有

    android:textcolorhighlight=”#cccccc”

    被选中文字的底色,默认为蓝色

    android:textcolorhint=”#ffff00”

    设置提示信息文字的颜色,默认为灰色

    android:textscalex=”1.5”

    控制字与字之间的间距

    android:typeface=”monospace”

    字型,normal, sans, serif, monospace

    android:background=”@null”

    空间背景,这里没有,指透明

    android:layout_weight=”1”

    权重,控制控件之间的地位,在控制控件显示的大小时蛮有用的。

    android:textappearance=”?android:attr/textappearancelargeinverse”

    文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。不知道这样理解对不对?

     

    通过edittext的layout xml文件中的相关属性来实现: 

      1. 密码框属性 android:password =”true”  这条可以让edittext显示的内容自动为星号,输入时内容会在1秒内变成*字样。

      2. 纯数字 android:numeric=”true” 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入

      3. 仅允许 android:capitalize=”cwj1987” 这样仅允许接受输入cwj1987,一般用于密码验证

      下面是一些扩展的风格属性

      android:editable=”false” 设置edittext不可编辑

      android:singleline=”true” 强制输入的内容在单行

      android:ellipsize=”end” 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时

     

     

    relativelayout布局 

     

    android:layout_margintop=”25dip” //顶部距离 

    android:gravity=”left” //空间布局位置 

    android:layout_marginleft=”15dip //距离左边距 

     

    // 相对于给定id控件 

    android:layout_above 将该控件的底部置于给定id的控件之上; 

    android:layout_below 将该控件的底部置于给定id的控件之下; 

    android:layout_toleftof    将该控件的右边缘与给定id的控件左边缘对齐; 

    android:layout_torightof  将该控件的左边缘与给定id的控件右边缘对齐; 

    android:layout_alignbaseline  将该控件的baseline与给定id的baseline对齐; 

    android:layout_aligntop        将该控件的顶部边缘与给定id的顶部边缘对齐; 

    android:layout_alignbottom   将该控件的底部边缘与给定id的底部边缘对齐; 

    android:layout_alignleft        将该控件的左边缘与给定id的左边缘对齐; 

    android:layout_alignright      将该控件的右边缘与给定id的右边缘对齐; 

     

    // 相对于父组件 

    android:layout_alignparenttop      如果为true,将该控件的顶部与其父控件的顶部对齐; 

    android:layout_alignparentbottom 如果为true,将该控件的底部与其父控件的底部对齐; 

    android:layout_alignparentleft      如果为true,将该控件的左部与其父控件的左部对齐; 

    android:layout_alignparentright    如果为true,将该控件的右部与其父控件的右部对齐; 

     

    // 居中 

    android:layout_centerhorizontal 如果为true,将该控件的置于水平居中; 

    android:layout_centervertical     如果为true,将该控件的置于垂直居中; 

    android:layout_centerinparent   如果为true,将该控件的置于父控件的中央; 

     

    // 指定移动像素 

    android:layout_margintop      上偏移的值; 

    android:layout_marginbottom 下偏移的值; 

    android:layout_marginleft   左偏移的值; 

    android:layout_marginright   右偏移的值;

     

    android:id  — 为控件指定相应的id 

    android:text — 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串 

    android:grivity — 指定控件的基本位置,比如说居中,居右等位置这里指的是控件中的文本位置并不是控件本身。 

    android:textsize — 指定控件当中字体的大小 

    android:background — 指定该控件所使用的背景色,rgb命名法 

    android:width — 指定控件的宽度 

    android:height — 指定控件的高度 

    android:padding* — 指定控件的内边距,也就是说控件当中的内容 

    android:sigleline — 如果设置为真的话,则控件的内容在同一行中进行显示 

     

    下边是相对布局属性的说明:relativelayout 

     

    android:layout_above 将该控件的底部至于给定id控件之上 

    android:layout_below 将该控件的顶部至于给定id的控件之下 

    android:layout_toleftof 将该控件的右边缘和给定id的控件左边缘对齐 

    android:layout_torightof 将该控件的左边缘和给定id的控件的右边缘对齐 

     

    android:layout_alignbaseline 该控件的baseline和给定id的控件的baseline对齐 

    android:layout_alignbottom 将该控件的底部边缘与给定id控件的底部边缘对齐 

    android:layout_alignleft 将该控件的左边缘与给定id控件的左边缘对齐 

    android:layout_alignright 将该控件的右边缘与给定id控件的右边缘对齐 

    android:layout_aligntop 将该控件的顶部边缘与给定id控件的顶部对齐 

     

    android:alignparentbottom 如果该值为true,则将该控件的底部和父控件的底部对齐 

    android:layout_alignparentleft 如果该值为true,则将该控件左边与父控件的左边对齐 

    android:layout_alignparentright 如果该值为true,则将该控件的右边与父控件的右边对齐 

    android:layout_alignparenttop 如果该值为true,则将该控件的顶部与父控件的顶部对齐 

     

    android:layout_centerhorizontal 如果为真,该控件将被至于水平方向的中央 

    android:layout_centerinparent 如果为真,该控件将被至于父控件水平方向和垂直方向的中央 

    android:layout_centervertical 如果为真,该控件将被至于垂直方向的中央 

    android:layout_marginleft此属性用来设置控件之间的间隙(控件和控件之间和内边距不同) 

    android:padding=”3dip”说明了四边的内边距是3dip 

                  

     

    tablelayout 

     

    <tablelayout xmlns:android=”http://schemas.android.com/apk/res/android” 

        android:orientation=”vertical” 

       android:layout_width=”fill_parent” 

      android:layout_height=”fill_parent” 

        android:stretchcolumns=”0” 

        ></tablelayout> 

     

    android:stretchcolumns=”0”第一列作为拉伸列填满整行 

    java中修饰符总结:

     

    1、访问控制修饰符

    public的访问级别是最高的,其次是protected、默认和private

    成员变量和成员方法可以处于4个访问级别中的一个:公开、受保护、默认或私有

    顶层类可以处于公开或默认级别,顶层类不能被protected和private修饰

    局部变量不能被访问控制修饰符修饰

    2、abstract修饰符

    抽象类不能被实例化

    抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象方法

    如果子类没有实现父类中所有的抽象方法,子类也必须定义为抽象类

    抽象类不能被定义为private、final、和static类型

    没有抽象的构造方法

    抽象方法没有方法体

    3、final修饰符

    用final修饰的类不能被继承

    用final修饰的方法不能被子类的方法覆盖

    private类型的方法都默认为是final方法,因而不能被子类的方法覆盖

    final变量必须被显式初始化,并且只能被赋值一次值

     

     

    搜索此文相关文章:安卓Android 控件属性大全

     


    此文链

    展开全文
  • 在写自定控件时,填充自定义控件属性有两种,一种是直接在布局文件里面添加 xmlns:app="http://schemas.android.com/apk/res-auto" 然后以app:-- 开头的形式直接填充属性,然而这是一种比较呆板的填充方式,我们...
    在写自定控件时,填充自定义控件的属性有两种,一种是直接在布局文件里面添加
    
    xmlns:app="http://schemas.android.com/apk/res-auto"

    然后以app:--  开头的形式直接填充属性,然而这是一种比较呆板的填充方式,我们如何在layout外面动态填充属性呢?其实很简单,直接上代码,下面列举一个在listview里面item相为我们自定义控件。

    这是我的自定义控件InfoView

    package com.sj.yinjiaoyun.mytest.view;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    import com.sj.yinjiaoyun.mytest.R;
    
    
    /**
     * Created by Administrator on 2016/8/18.
     * 个人资料自定义控件
     */
    public class InfoView extends RelativeLayout{
    
        Context context;
        TextView etName;//用户名字
        TextView etText;//内容
        String TAG="result";
        public InfoView(Context context) {
            super(context);
            Log.i(TAG, "InfoView: 1");
            init(context);
        }
    
        public InfoView(Context context, AttributeSet attrs) {
            super(context, attrs);
            Log.i(TAG, "InfoView: 2");
            init(context);
            getValues(attrs);
        }
    
        public InfoView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            Log.i(TAG, "InfoView: 3");
            init(context);
            getValues(attrs);
        }
        //初始化控件
        private void init(Context context){
            Log.i(TAG, "init: ");
            this.context=context;
            View view= LayoutInflater.from(context).inflate(R.layout.view_info,this);
            etName= (TextView) view.findViewById(R.id.view_name);
            etText= (TextView) view.findViewById(R.id.view_text);
        }
    
        public void getValues(AttributeSet attrs){
            Log.i(TAG, "getValues: ");
            TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.attrs_info);
            String name=array.getString(R.styleable.attrs_info_attr_name);
                etName.setText(name);
            String text=array.getString(R.styleable.attrs_info_attr_text);
                etText.setText(text);
            array.recycle();
        }
    
        /**
         * 外部设置属性的方法
         * @param cName
         * @param cText
         */
        public void setValues(String cName,String cText){
            Log.i(TAG, "setValues: ");
            etName.setText(cName);
            etText.setText(cText);
        }
    }

    自定义控件里面的布局ViewInfo

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp">
    
        <TextView
            android:id="@+id/view_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
             />
    
        <TextView
            android:id="@+id/view_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:alpha="0.7"
            android:padding="5dp"
             />
    
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_below="@id/view_name"
            android:background="@color/colorAccent" />
    </RelativeLayout>

    values里面的设置userInfo

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="attrs_info">
            <attr name="attr_name" format="string"/>
            <attr name="attr_text" format="string"/>
        </declare-styleable>
    </resources>


    当我的布局文件在使用自定控件时,我们可以看到log打印出来的是infoView2  init  setValues的先后顺序,


    我的程序入口对应的MainActivity类

    package com.sj.yinjiaoyun.mytest;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ListView;
    
    import com.sj.yinjiaoyun.mytest.adapter.MyAdapter;
    import com.sj.yinjiaoyun.mytest.domain.Info;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        List<Info> list;
        ListView listView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView= (ListView) findViewById(R.id.list_item);
            list=new ArrayList<>();
            for(int i=0;i<20;i++){
               
                list.add(new Info("名字"+i,"内容"+i));
                
            }
            MyAdapter adapter=new MyAdapter(this,list);
            listView.setAdapter(adapter);
        }
    }

    MainActivty加载的布局文件的activity_main

    <?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:gravity="center"
        android:orientation="vertical">
    
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list_item"/>
    
    </LinearLayout>

    我的adapter类MyAdapter

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    
    import com.sj.yinjiaoyun.mytest.R;
    import com.sj.yinjiaoyun.mytest.domain.Info;
    import com.sj.yinjiaoyun.mytest.view.InfoView;
    
    import java.util.List;
    
    
    public class MyAdapter  extends BaseAdapter{
        Context context;
        List<Info> list;
        LayoutInflater inflater;
        public MyAdapter(Context context, List<Info> list) {
            this.context = context;
            this.list = list;
            inflater=LayoutInflater.from(context);
        }
    
        @Override
        public int getCount() {
            return list==null?0:list.size();
        }
    
        @Override
        public Object getItem(int position) {
            return list.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Info info=list.get(position);
            InfoView infoView = null;
            if(convertView==null){
                convertView=inflater.inflate(R.layout.item_list,null);
                infoView= (InfoView) convertView.findViewById(R.id.view_info);
                convertView.setTag(infoView);
            }
            infoView= (InfoView) convertView.getTag();
            //此处为关键设置值的方法
            infoView.setValues(info.getName(),info.getText());
            return convertView;
        }
    
    }

    下面是我的adapter加载的item_list布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <com.sj.yinjiaoyun.mytest.view.InfoView
            android:id="@+id/view_info"
            app:attr_name="名字1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    我的adapter里面传的对象封装类Info

    public class Info {
        String name;
        String text;//传入string类型的值
     
    
        public Info(String name, String text) {
            this.name = name;
            this.text = text;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    }
    运行该代码后的效果图





    展开全文
  • 添加用户控件之后就可以自己随意设置控件内容了,这里说下关于属性的一些设置。 1.自定义控件显示在工具箱的开关: 将true改为false就可以不显示了. [ToolboxItem(true)] public partial class ...

    因为要做流体布局,但两个控件没办法组合,就做自定义控件。这个控件需要一个text设置文本,一个pic设置图片显示,图片通过选择获取,在属性面板里能够修改。

    添加用户控件之后就可以自己随意设置控件内容了,这里说下关于属性的一些设置。

    1.自定义控件显示在工具箱的开关:
    将true改为false就可以不显示了.

    [ToolboxItem(true)]
    public partial class UserControl1 : UserControl

    2.自定义控件在工具箱中的图标显示:
    可以使用已有控件的图标

    [ToolboxBitmap(typeof(System.Windows.Forms.PictureBox))]
    public partial class UserControl1 : UserControl

    如果不想用系统的图标,要使用自己的图标,可以这样(这部分未测试,源于参考文章)

    [ToolboxBitmap(typeof(MyPanel), "WindowsApplication1.Images.MyPanel.bmp")]
    public class MyPanel : UserControl

    不过,一定要注意路径,WindowsApplication1.Images.MyPanel.bmp表示,解决方案是WindowsApplication1,目录是Images,文件名是MyPanel.bmp,同时,这个图片必须是“嵌入的资源”(点击文件,右键,属性,有一个文件属性,其中,在生成操作中,可以选择"嵌入的资源")

    3.自定义控件在属性面板上的显示开关:

    [Browsable(true)]
    [Description("属性描述"), Category("属性类别"), DefaultValue("属性默认值,重置时使用")]
    public override string Text
            {
                get { return label1.Text; }
                set { label1.Text = value; }
            }

    category设定的是属性在属性面板上显示的类别,当使用了类别时,组件属性和事件可以按逻辑分组显示在属性浏览器中。Category("Appearance")就可以把属性从杂项转移到外观。
    (摘抄自参考文章)用于设置默认的值,对于string,bool,int,可以直接写出来,如[DefaultValue(10)],这是可以的,不过,不是这三种类型的话,就比较麻烦,一定要先转化为string才能设置成功。如上面的DarkGray,这是系统定义的颜色,这还是比较好处理的。不过,如果是一些自定义的颜色,如颜色是128,0,128,你应该将128转为16进制,写成0x800080,前缀0x是一定要加的。最后就这样[DefaultValue(typeof(Color), "0x800080")]
    还有一种[DefaultValue(typeof(Color), "0, 70, 213")]
    如果是字体的话需要[DefaultValue(typeof(Font), "宋体, 9pt")]
    这两种特殊情况三种方法本人均未测试。

     

    4.自定义控件属性选择资源:

    [Browsable(true)]
    [Description("设置控件图片"), Category("setPic"), DefaultValue(" ")]
    public Bitmap setPic
            {
                get { return (Bitmap)this.pictureBox1.Image; }
                set
                {
                   this.pictureBox1.Image = value;
                }
            }

    这样的话就会在属性面板的设置中出现选择资源的对话框来选择。

    5.自定义控件属性选择下拉列表:

    在定义属性的时候需要先设置好枚举值,通过枚举来定义属性,如例下

    public enum indexEnum
            { 
                a,
                b,
                c
            }
    public indexEnum index;
    [Browsable(true)]
    [Description("设置index"), Category("Index"), DefaultValue("属性默认值")]
    public indexEnum Index
            {
                get { return index; }
                set { index = value; }
            }

     

    展开全文
  • 假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。 可以这样去形容LayoutParams,在象棋的棋盘上,每个...
  • wpf,自定义控件属性,可以在xaml里设置,那么怎样在c#里修改属性?我自定义了datepicker的一个属性,现在想用c#来后台修改(当触发时间时),求大牛解答
  • 这一节,大家共同学习下,用户控件的自定义的复杂的属性设置,我们这里自定义一个用户控件和自定义一个属性。  本节重点:  1.怎样定义复杂属性  2.复杂属性和基本类型相互转换   1.第一步, 先来自定义一...
  • 在前几节中,我们演示了怎样进行用户控件开发,大家可能对用户控件中的一些属性的基本设置还存在疑惑,这节我们共同学习下用户控件的基本属性设置。 所谓基本属性设置,就是我们常常看到控件属性设计器中可以对...
  • Qt编写控件属性设计器5-属性中文

    千次阅读 2019-09-11 15:32:11
    在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过...
  • 服务器控件属性

    千次阅读 2009-10-22 11:11:00
    服务器控件属性 本章内容4.1 控件属性的作用4.2 简单属性4.3 属性的设计时特性4.4 复杂属性4.5 深入研究——定制自己的属性编辑器4.6 类型转换器4.7 实现自定义属性 4.1 控件属性
  • Qt编写控件属性设计器2-拖曳控件

    千次阅读 2019-09-10 10:08:56
    上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropEvent和...
  • form表单控件及控件属性

    千次阅读 2019-09-25 00:21:09
    今天又学习了前端的form控件,这是我第二遍学习,确实发现不少新东西,把自己觉得常用的记下来 表单控件: **form:最主要的一个标签,但是这个元素不会生成可是化部分** 属性: action:表单提交的地址 method...
  • VB控件属性大全

    万次阅读 多人点赞 2018-06-14 08:54:57
    21.02、标签控件(Lable)的常用属性... 71.03、文本框控件(TextBox)的常用属性... 91.04、框架控件(Frame)的常用属性... 131.05、命令按钮控件(CommandButton)的常用属性... 151.06、复选框控件(CheckBox)的常用属性...
  • 这一节我们共同学习下用户控件的下拉式属性设置,可以为用户控件设置属性以下拉框的形式显示出来,效果图如下    这里我们定义一个用户控件设置一个属性DropDownPropery  代码如下   public partial ...
  • Qt编写控件属性设计器

    千次阅读 2019-09-13 10:41:50
    自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDesigner一样,可以...
  • gridview控件属性

    万次阅读 2012-05-28 15:58:32
    1. GridView控件属性  表10.6 GridView控件的行为属性   属性 描述 AllowPaging 指示该控件是否支持分页。 AllowSorting 指示该控件是否支持排序。 AutoGenerateColumns 指示是否...
  • WinForm控件属性大全

    千次阅读 2020-04-20 19:03:17
    C#控件及常用设计整 1、窗体... 1 2、Label 控件... 3 3、TextBox 控件... 4 4、RichTextBox控件... 5 5、NumericUpDown 控件... 7 6、Button 控件... 7 7、GroupBox 控件... 7 8、RadioButton控件... 8 9...
  • TreeView控件属性

    千次阅读 2010-05-11 14:01:00
    TreeView控件属性属性说明AutoGenerateDataBindings可以设置为true。默认情况下需要手工设置数据和树接点的绑定关系CheckedNodes返回那些多选框被选中的节点的集合CollapseImageToolTip当节点处于折叠状态时,所显示
  • Qt编写自定义控件属性设计器

    千次阅读 2018-09-23 23:00:56
    因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需要自定义绘制一些控件满足特定的需求,比如仪器仪表、组态等,而且需要直接用户通过属性设计的形式生成导出控件及界面数据,下次导入...
  • 常用DELPHI控件属性事件设置说明(第二篇)  (2012-03-13 08:48:48) 转载▼ 标签:  delphi控件属性   it 分类: delphi 常用DELPHI控件属性设置说明 目录 TForm Class...
  • Winform控件属性事件介绍

    千次阅读 2016-08-28 13:10:05
    2、Label控件 3、TextBox控件 4、RichTextBox控件 5、NumericUpDown控件 6、Button控件 7、GroupBox控件 8、RadioButton控件 9、CheckBox控件 10、ListBox控件 11、ComboBox控件 12、CheckedListBox控件 13、...
  • Android:控件属性

    千次阅读 2013-09-29 09:48:26
    Android:控件属性 分类: android基础2013-06-18 16:06 82人阅读 评论(0) 收藏 举报 控件属性: android属性 Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合...
  • 原因是该用户自定义控件设置了缓存,之后刷新或是回传时 .NET并不会再生成该控件对象,因此引用属性会出异常
  • C#常用控件属性及方法汇总

    千次阅读 2018-12-28 08:15:06
    窗体类控件 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 (2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示...
  • PB控件属性之Tab

    千次阅读 2014-07-03 11:21:25
    Tab控件-Tab 【其他】 ■调整标签页的顺序:点击标签以选中标签控件,在属性视窗中进入到Pageorder属性页,在Page Name列中点击选中要调整顺序的标签页,然后...该控件属性CreateOnDemand设置为True时,可以
  • 实现步骤: 1. spin control控件是与编辑框控件配合使用的,先在对话框中添加这两个控件。如图: ...2. 在打开对话框窗体状态下,按照下图所示菜单中(或者...3. 然后在属性中设置绑定,在spin控件属性设置Set...
  • Winform自定义控件属性

    千次阅读 2018-06-21 20:14:58
    【WinForm】自定义控件(进度控制条)上篇说了如何创建自定义控件,接下来说说如何自定义属性,如何绘制控件,以进度控制条为例,先上效果图这里只实现了简单的进度控制功能,该控件由三部分组成,总长度(底部白色...
  • 部分android控件属性总结

    千次阅读 2015-03-02 16:57:15
    做安卓应用开发,不得不用xml代码写界面布局,各种控件各种属性太多太多了,有的属性之前还根本没有用过,今天终于花点时间,在网上淘了淘,加上平时工作中用的,把一些属性写下来,下次用的时候就可以翻一翻了。...
  •  这里我们定义一个用户控件,并为用户控件设置一个属性,使用弹出式对话框为属性设置值。  定义属性ShowPropery  代码如下   public partial class UCLab : UserControl { public UCLab()
  • C# 控件属性一览表

    千次阅读 2015-01-09 21:09:17
    (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。  (2) WindowState属性:  用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized (窗体以最小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 262,728
精华内容 105,091
关键字:

如何设置用户登录控件的属性