优秀的第三方常用控件

常用UI控件 常用UI控件本节小结知识点: 可能用得上的UI控件 什么是UILabel 什么是UIImageView 什么是UIImage 什么是UIButton UIButton、UIImageView、UILabel的选择 Storyboard到代码的转换 1. 可能用得上的UI控件 为了便于开发者打造各式各样的优秀App,UIKit框架提供了非常多功能强大又易用的UI控件 以下列举一些在开发中可能用得上的U 阅读详情

try

字母索引(城市和通讯录)

IndexableRecyclerView

城市索引

城市索引

通讯录索引

通讯录索引

<?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:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">
    <!-- <TextView
         android:text="@string/content_movie"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>-->


    <me.yokeyword.indexablerv.IndexableLayout
        android:id="@+id/indexableLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:indexBar_background="#08000000"
        app:indexBar_layout_width="50dp"
        app:indexBar_textColor="@android:color/black"
        app:indexBar_textSpace="8dp"/>
</LinearLayout>
public class FragmentMovie extends BaseFragment {

    private List<CityEntity> mDatas;
    private SimpleHeaderAdapter<CityEntity> mHotCityAdapter;

    @Override
    protected int getLayoutId() {
        return R.layout.fragment_movie;
    }

    @Override
    protected void initView(View view) {
        IndexableLayout indexableLayout = (IndexableLayout) view.findViewById(R.id.indexableLayout);
        indexableLayout.setLayoutManager(new GridLayoutManager(this.getContext(), 1));
        // setAdapter
        CityAdapter adapter = new CityAdapter(this.getContext());
        indexableLayout.setAdapter(adapter);
        // set Datas
        mDatas = initDatas();
        // 快速排序。  排序规则设置为:只按首字母  (默认全拼音排序)  效率很高,是默认的10倍左右。  按需开启~
        indexableLayout.setCompareMode(IndexableLayout.MODE_FAST);

        adapter.setDatas(mDatas, new IndexableAdapter.IndexCallback<CityEntity>() {
            @Override
            public void onFinished(List<EntityWrapper<CityEntity>> datas) {
                // 数据处理完成后回调
//                mSearchFragment.bindDatas(mDatas);
//                mProgressBar.setVisibility(View.GONE);
            }
        });


        // set Center OverlayView
//        indexableLayout.setOverlayStyle_Center();


adapter.setOnItemContentClickListener(new IndexableAdapter.OnItemContentClickListener<CityEntity>() {
    @Override
    public void onItemClick(View v, int originalPosition, int currentPosition, CityEntity entity) {

    }
});
        // set Listener
        adapter.setOnItemContentClickListener(new IndexableAdapter.OnItemContentClickListener<CityEntity>() {
            @Override
            public void onItemClick(View v, int originalPosition, int currentPosition, CityEntity entity) {
                if (originalPosition >= 0) {
                    ToastUtil.showShort(getContext(), "选中:" + entity.getName() + "  当前位置:" + currentPosition + "  原始所在数组位置:" + originalPosition);
                } else {
                    ToastUtil.showShort(getContext(), "选中Header:" + entity.getName() + "  当前位置:" + currentPosition);
                }
            }
        });

        adapter.setOnItemTitleClickListener(new IndexableAdapter.OnItemTitleClickListener() {
            @Override
            public void onItemClick(View v, int currentPosition, String indexTitle) {
                ToastUtil.showShort(getContext(), "选中:" + indexTitle + "  当前位置:" + currentPosition);
            }
        });



        // 添加 HeaderView DefaultHeaderAdapter接收一个IndexableAdapter, 使其布局以及点击事件和IndexableAdapter一致
        // 如果想自定义布局,点击事件, 可传入 new IndexableHeaderAdapter

        mHotCityAdapter = new SimpleHeaderAdapter<>(adapter, "热门", "热门城市", iniyHotCityDatas());
        // 热门城市
        indexableLayout.addHeaderAdapter(mHotCityAdapter);
        // 定位
        final List<CityEntity> gpsCity = iniyGPSCityDatas();
        final SimpleHeaderAdapter gpsHeaderAdapter = new SimpleHeaderAdapter<>(adapter, "定位", "当前城市", gpsCity);
        indexableLayout.addHeaderAdapter(gpsHeaderAdapter);

        // 显示真实索引
//        indexableLayout.showAllLetter(false);

        // 模拟定位
        indexableLayout.postDelayed(new Runnable() {
            @Override
            public void run() {
                gpsCity.get(0).setName("杭州市");
                gpsHeaderAdapter.notifyDataSetChanged();
            }
        }, 3000);

        // 搜索Demo
//        initSearch();





    }
    private List<CityEntity> iniyGPSCityDatas() {
        List<CityEntity> list = new ArrayList<>();
        list.add(new CityEntity("定位中..."));
        return list;
    }
    private List<CityEntity> initDatas() {
        List<CityEntity> list = new ArrayList<>();
        List<String> cityStrings = Arrays.asList(getResources().getStringArray(R.array.city_array));
        for (String item : cityStrings) {
            CityEntity cityEntity = new CityEntity();
            cityEntity.setName(item);
            list.add(cityEntity);
        }
        return list;
    }

    private List<CityEntity> iniyHotCityDatas() {
        List<CityEntity> list = new ArrayList<>();
        list.add(new CityEntity("杭州市"));
        list.add(new CityEntity("北京市"));
        list.add(new CityEntity("上海市"));
        list.add(new CityEntity("广州市"));
        return list;
    }

}
CityAdapter
package com.mine.moviedemo.entity;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.mine.moviedemo.R;

import me.yokeyword.indexablerv.IndexableAdapter;

/**
 * Created by YoKey on 16/10/7.
 */
public class CityAdapter extends IndexableAdapter<CityEntity> {
    private LayoutInflater mInflater;

    public CityAdapter(Context context) {
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public RecyclerView.ViewHolder onCreateTitleViewHolder(ViewGroup parent) {
        View view = mInflater.inflate(R.layout.item_index_city, parent, false);
        return new IndexVH(view);
    }

    @Override
    public RecyclerView.ViewHolder onCreateContentViewHolder(ViewGroup parent) {
        View view = mInflater.inflate(R.layout.item_city, parent, false);
        return new ContentVH(view);
    }

    @Override
    public void onBindTitleViewHolder(RecyclerView.ViewHolder holder, String indexTitle) {
        IndexVH vh = (IndexVH) holder;
        vh.tv.setText(indexTitle);
    }

    @Override
    public void onBindContentViewHolder(RecyclerView.ViewHolder holder, CityEntity entity) {
        ContentVH vh = (ContentVH) holder;
        vh.tv.setText(entity.getName());
    }

    private class IndexVH extends RecyclerView.ViewHolder {
        TextView tv;

        public IndexVH(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.tv_index);
        }
    }

    private class ContentVH extends RecyclerView.ViewHolder {
        TextView tv;

        public ContentVH(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.tv_name);
        }
    }
}
CityEntity
package com.mine.moviedemo.entity;

import me.yokeyword.indexablerv.IndexableEntity;

/**
 * Created by a on 2017/4/14.
 */

public class CityEntity implements IndexableEntity {
    private long id;
    private String name;
    private String pinyin;

    public CityEntity() {
    }

    public CityEntity(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPinyin() {
        return pinyin;
    }

    public void setPinyin(String pinyin) {
        this.pinyin = pinyin;
    }

    @Override
    public String getFieldIndexBy() {
        return name;
    }

    @Override
    public void setFieldIndexBy(String indexByField) {
        this.name = indexByField;
    }

    @Override
    public void setFieldPinyinIndexBy(String pinyin) {
        this.pinyin = pinyin;
    }
}

EasyRecyclerView

将开发中常用的RecyclerView的各种需求封装进库。
并且adapter支持数据管理,Header与Footer添加,加载更多。没有更多。加载错误

这里写图片描述

轮播图

android图片轮播效果,RollViewPager的简单使用
RollViewPager的github

另一个轮播图Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!

导入第三方的moudle时,最好先把三方的demo先导入一次,导入demo时,修改所有的(项目的gradle和moudle的gradle都要改)
‘compileSdkVersion 25
buildToolsVersion “25.0.3”’
然后修改项目的gradle目录下的两个文件,用本地文件去替换他们
这样就可以运行这个demo了
运行无误后,把这个改装后的moudle导入自己的项目即可,记得
’ compile project(‘:banner’)’,
这是还可能有错误,就需要对照原demo中的gradle文件,去添加一些代码

轮播图

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

           ★ <com.jude.rollviewpager.RollPagerView
                android:id="@+id/rollPager"
                android:layout_width="match_parent"
                android:layout_height="180dp"
                app:rollviewpager_play_delay="3000"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="@string/content"/>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
package com.mine.moviedemo.fragment;

import android.graphics.Color;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import com.jude.rollviewpager.RollPagerView;
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
import com.jude.rollviewpager.hintview.ColorPointHintView;
import com.mine.moviedemo.R;
import com.mine.moviedemo.base.BaseFragment;

/**
 * Created by a on 2017/4/13.
 */

public class FragmentHome extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener {

    private SwipeRefreshLayout mRefresh;
    private View view;
    private RollPagerView mRollViewPager;

    @Override
    protected void initView(View view) {
        this.view = view;
        mRefresh = (SwipeRefreshLayout) view.findViewById(R.id.refresh);
        mRefresh.setOnRefreshListener(this);
        mRollViewPager = (RollPagerView) view.findViewById(R.id.rollPager);

        //设置播放时间间隔
        mRollViewPager.setPlayDelay(1000);
        //设置透明度
        mRollViewPager.setAnimationDurtion(500);
        //设置适配器
        mRollViewPager.setAdapter(new TestNormalAdapter());

        //设置指示器(顺序依次)
        //自定义指示器图片
        //设置圆点指示器颜色
        //设置文字指示器
        //隐藏指示器
        //mRollViewPager.setHintView(new IconHintView(this, R.drawable.point_focus, R.drawable.point_normal));
        mRollViewPager.setHintView(new ColorPointHintView(getContext(), Color.YELLOW, Color.WHITE));
        //mRollViewPager.setHintView(new TextHintView(this));
        //mRollViewPager.setHintView(null);
    }

    private class TestNormalAdapter extends StaticPagerAdapter {
        private int[] imgs = {
                R.mipmap.img1,
                R.mipmap.img2,
                R.mipmap.img3,
        };


        @Override
        public View getView(ViewGroup container, int position) {
            ImageView view = new ImageView(container.getContext());
            view.setImageResource(imgs[position]);
            view.setScaleType(ImageView.ScaleType.CENTER_CROP);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            return view;
        }


        @Override
        public int getCount() {
            return imgs.length;
        }
    }


    @Override
    protected int getLayoutId() {
        return R.layout.fragment_home;
    }

    @Override
    public void onRefresh() {
        Toast.makeText(getContext(), "开始刷新", Toast.LENGTH_SHORT).show();
        view.postDelayed(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getContext(), "开始完毕", Toast.LENGTH_SHORT).show();
                mRefresh.setRefreshing(false);
            }
        }, 1500);

    }
}
C#全套第三方控件拖放式UI开发实战 在现代软件开发中,用户界面(UI)不仅承载着功能交互的职责,更是用户体验(UX)的核心体现。C#作为.NET平台下的主流开发语言,其原生控件(如Windows Forms控件库)提供了基础的界面构建能力。然而,随着应用需求的日益复杂和用户审美的提升,原生控件在样式美观、功能扩展和交互体验上逐渐显现出局限。第三方控件库的出现,为开发者提供了更丰富、更专业的UI组件选择。它们通常封装了高级功能、响应式布局、主题支持以及动画效果,极大地提升了开发效率和界面质量。 阅读详情

相关推荐

Delphi第三方控件应用大全:增强开发与用户体验

Developer Express Inc.(以下简称DX)是一家在Delphi和C++ Builder开发者社区中非常知名且受尊敬的第三方组件供应商。DX的产品线非常丰富,涵盖了各种用户界面组件、报表生成工具、数据可视化工具以及后端数据库开发组件。DX的一个显著特点是它所有的产品都有统一的风格和用户体验,这在提升应用程序的美观度和一致性方面有着显著的成效。DX的产品主要分为以下几个系列:VCL:针对Delphi旧版的组件库。:用于FireMonkey框架的跨平台组件。

weixin_42452483的博客 565

C#--Winform第三方控件资源汇总

最近在用C#Winform做一个关于GNSS作业仿真的软件,这次界面想做的和别人写的WPF一样炫酷些,然而自定义控件太麻烦,于是就到网络搜索轮子哥造好的轮子,随着编程世界的开源化和中国程序员的崛起,有越来越多的优秀作品被开源,供大家学习使用,以下呢,就是我找到的开源的自定义的控件资源,希望可以帮助大家: 1.HZHControls 传送门:-------------->ClickMe 2.SunnyUI.Sharp 传送门:-------------->ClickMe ...

zwb_578209160的博客 1万+

深入解析XTEA加密算法的核心机制与优化策略

本文深入解析XTEA加密算法的核心机制与优化策略,详细介绍了XTEA在嵌入式系统和资源受限环境中的优势,包括其高效的加解密速度和低资源消耗。文章还探讨了XTEA的轮函数设计、关键参数优化策略以及实战应用中的性能对比,为开发者提供了安全增强方案和优化技巧。

k8l9m0n的博客 242

第三方控件使用大全

一、              ComboBoxEdit 1、  如何使其不可编辑 TextEditStyle 设置为:DisableTextEditor 2、  如何设置鼠标为手形 Cursor 设置为:Hand 二、              GridControl 1、  如何解决单击记录整行选中的问题 View->OptionsBehavior->Edito

xjli0915的专栏 1774

基于AIS动态数据与AI结合得经纬度标示算法

港口船舶智能标注系统 本系统通过结合摄像头视频流和AIS船舶动态数据,利用AI技术实现船舶实时标注功能。系统架构包括视频流处理、AIS数据解析、船舶检测匹配和坐标映射转换等模块。关键技术步骤: AIS数据获取:通过本地接收机或网络API获取船舶位置、航速等信息 AI目标检测:采用YOLOv8等模型识别视频中的船舶 船舶匹配算法:通过位置投影或运动轨迹匹配视频目标与AIS数据 坐标映射:使用相机标定技术将经纬度转换为图像坐标 实时标注:在视频画面上叠加船名、位置等关键信息 应用场景包括港口监控、智能海事管理和

qianbo042311的博客 1808

WRF-BEM相关参数说明

本参数适用于WRF-BEM模拟武汉市气候。

m0_60013472的博客 1896

C#添加第三方控件

C#添加第三方控件

yue008的博客 5727

GD32F407工程模板搭建全记录:从零整理固件库、创建文件夹到编译通过

本文详细记录了GD32F407工程模板的搭建过程,从固件库整理、目录规划到Keil环境配置,帮助开发者快速搭建可维护的嵌入式工程结构。重点介绍了开发环境搭建、工程目录设计、Keil配置及常见编译问题解决方案,适合嵌入式开发者参考。

weixin_29164497的博客 118

Android引用RN第三方控件,Android和RN互调方式,最近开发心得

从工作到现在,我是个四年的程序员了,但是觉得自己踩的坑真的是填都填不完。所以决定把我踩的坑,系统性的归纳和记录,所以优快云,爷回来了。错了,是干净的爷回来了。

齐码闯天涯 1035

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1510

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

WPF第三方控件盘点

WPF统一的编程模型、语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评的网格控件、图表控件、停靠窗口和文本编辑器。 网格控件 1、 Mindscape WPF Property Grid 这款表格控件是100%原生WPF表格控件,是Mindscap...

weixin_30552811的博客 419

Python爬虫实战:如何抓取旅游论坛上的帖子、旅行攻略和评论内容

无论是知名的旅游网站,还是地方性的旅游讨论区,用户发布的旅行贴文、攻略和评论往往包含着大量的宝贵信息。本文将详细介绍如何使用Python编写一个爬虫,抓取旅游论坛上的帖子、旅行攻略和评论内容,涵盖从获取页面内容、解析数据到处理动态加载等各个方面的技术。从基本的请求和网页解析,到动态加载页面的处理,再到数据存储和反爬虫技巧,我们详细讲解了抓取旅游论坛数据的全过程。通过本文的介绍,你可以将所学的爬虫技术应用到其他类似的网站抓取任务中,为后续的数据分析、机器学习等任务提供丰富的数据源。在这种情况下,传统的。

2201_76125261的博客 1557

Android开源项目分类汇总

Android开源项目分类汇总   第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、 GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、 FlipView、ColorPickVie

老树的技术博客 606

uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题

uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt

✅ 精选推荐文章 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android优秀第三方开源(一)

公司项目上线了,应该是有一段空闲期,打算看下一些优秀的项目,整理下思路,做一段总结。已经很长一段时间没有写博客了,一方面是想着提高博客质量写一些高质量的文章,但写的时候总担心文笔不行,所以造成了很长一段时间没有自己的原创文章,二来是感觉确实没什么好写的,现在Android这一块基本想要什么网上都有了,而且都还总结的不错。拿来都能用,轮子都造好了,装上就可以了。对于开发产生了一种惰性。 闲暇

aserbao的博客 5284

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Delphi第三方控件大测评

 古人云∶“工欲善其事,必先利其器。” 这句话,我想凡是用Delphi的朋友,应该都有很深切的体会吧。的确,如果Delphi没有了控件的支持,那么人气度一定会大大的降低,不会有现在这样多的Fan了,俺也就改行用BCB或VC了,呵呵。但是,现在控件满天飞,不要说DSP(Delphi Super Page)了,光一个深度历险上面的控件就已经洋洋洒洒上万数了,而且每天还在更新,多恐怖啊∶)然

gseven888的专栏 1200

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Android】常用的第三方开源库汇总

Android 第三方库是由其他开发者或组织创建并维护的可重用的代码库。它们通常以 jar、aar 或者 Gradle 依赖的形式提供,并包含了各种功能模块、工具、组件等,帮助开发者简化开发流程、提高开发效率,并丰富了应用的功能和用户体验。下面列出了我自己经常用到的第三方开源库,还有一些好用的工具网站,同时也方便自己查阅

full courage的博客 5602

Delphi第三方组件--Delphi第三方控件大比拼

下面这篇文章是一位网友对多种第三方组(控)件的看法,英雄所见所略同,他的见解还是颇有见地的。但所谓智者见智,仁者见者,下面的红字是我的个人看法。   古人云∶“工欲善其事,必先利其器。” 这句话,我想凡是用Delphi的朋友,应该都有很深切的体会吧。的确,如果Delphi没有了控件的支持,那么人气度一定会大大的降低,不会有现在这样多的Fan了,俺也就改行用 BCB或VC了,呵呵。 但...

dianye4573的博客 778

Delphi第三方控件大比拼

  下面这篇文章是一位网友对多种第三方组(控)件的看法,英雄所见所略同,他的见解还是颇有见地的。但所谓智者见智,仁者见者,下面的红字是我的个人看法。   古人云∶“工欲善其事,必先利其器。” 这句话,我想凡是用Delphi的朋友,应该都有很深切的体会吧。的确,如果Delphi没有了控件的支持,那么人气度一定会大大的降低,不会有现在这样多的Fan了,俺也就改行用 BCB或VC了,呵呵。 但是,现在控

Tunix126的专栏 2304

Android集成主流优秀第三方组件框架

这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP

963

WinForm 第三方开源控件——C/S控件库HZHControls

HZHControls是一个基于.Net Framework4.0 的winform自定义控件库,完全原生控件开发,是一套可以在C/S客户端实现Web页面展示效果的控件库。提供说明文档及源码下载。

Pei_hua100的专栏 2624

(转载)这里是我搜集的所有优秀的第三方自定义控件

平常开发中,经常要用的各种各样的第三方自定义控件,为此在这里做一个集中 有好的第三方控件我会及时更新 1Android增强百分比布局 转载自 http://blog.youkuaiyun.com/lmj623565791/article/details/46767825 出自:【张鸿洋的博客】 2android之超级简单的下拉回弹--仿QQ个人主页 转载自 http://blog.csdn.n

Android_xiong_st的博客 1045

Material Design 常用控件总结

Material Design 相关的控件有很多,这里先就常用的一些控件做简要的介绍,待日后再对每一个控件进行详尽地学习。 由于控件数量繁多,不便于记忆,因此在这里就以控件的独立性为标准,简单地将其分为两类,分别是独立控件和协作控件。所谓的独立控件,就是一些功能上比较独立,不需要和其他控件协作的控件;所谓的协作控件,就是一些功能上需要和其他控件配合使用的控件。具体思维导图如下: 以下是对各个控件的简介,包括所在的包及其具体功能。 常用控件独立控件SnackbarToolbarFloatingActionBu

滥觞 589

Delphi第三方控件大比拼(免费篇)

下面这篇文章是一位网友对多种第三方组(控)件的看法,英雄所见所略同,他的见解还是颇有见地的。但所谓智者见智,仁者见者,下面的红字是我的个人看法。   古人云∶“工欲善其事,必先利其器。” 这句话,我想凡是用Delphi的朋友,应该都有很深切的体会吧。的确,如果Delphi没有了控件的支持,那么人气度一定会大大的降低,不会有现在这样多的Fan了,俺也就改行用 BCB或VC了,呵呵。 但是,现在控

iris1121的专栏 2066
上一篇: AS创建assets文件夹与字体
下一篇: Mac环境下,搭建了AndroidStudio开发环境
Android_Study_OK
博客等级 码龄11年 91粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值