{"id":17688217,"url":"https://github.com/ccapton/android-optionlayout","last_synced_at":"2025-03-30T21:28:01.321Z","repository":{"id":176302366,"uuid":"78757346","full_name":"Ccapton/Android-OptionLayout","owner":"Ccapton","description":"这是一个模仿QQ聊天列表左滑拉出菜单的控件","archived":false,"fork":false,"pushed_at":"2017-01-17T10:19:47.000Z","size":7436,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-06T01:41:23.379Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ccapton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-12T15:08:47.000Z","updated_at":"2023-09-10T16:31:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"2cdbd371-8733-4f4e-afde-9561896fc1b2","html_url":"https://github.com/Ccapton/Android-OptionLayout","commit_stats":null,"previous_names":["ccapton/android-optionlayout"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ccapton%2FAndroid-OptionLayout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ccapton%2FAndroid-OptionLayout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ccapton%2FAndroid-OptionLayout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ccapton%2FAndroid-OptionLayout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ccapton","download_url":"https://codeload.github.com/Ccapton/Android-OptionLayout/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246382606,"owners_count":20768237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-24T11:43:48.235Z","updated_at":"2025-03-30T21:28:01.296Z","avatar_url":"https://github.com/Ccapton.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OptionLayout\n\u003e 关于我，欢迎关注  \n  博客：ccapton(http://blog.csdn.net/ccapton) 微信：[Ccapton]()   \n \n### 简介: \n\n这是一个仿照QQ消息项侧滑显示菜单的自定义ViewGroup，实现侧滑弹出选项按钮的效果。\n\n### 示例:  \n\n在QQ中是这样的\n\n![](https://raw.githubusercontent.com/Ccapton/optionLayout/master/qq.gif)\n\n而我的效果是这样的\n\n![](https://raw.githubusercontent.com/Ccapton/optionLayout/master/my.gif)\n\n\n\n### 特性 \n\n左滑出现选项按钮，例如“置顶”,“删除”。可以改为自己想要的名称，功能也可自定义\n###原理说明\n这是一个自定义HorizontalScrollView，在里面动态添加了两个选项按钮，通过手势滑动监测实现滚动，从而显示出选项菜单。\n\n### 如何配置\n\n build.gradle(Project)\n ``` code\n allprojects {\n        repositories {\n            ...\n            maven { url 'https://jitpack.io' }\n        }\n    }\n ```\n build.gradle(Module:app)\n ``` code\n dependencies {\n          compile 'com.github.Ccapton:OptionLayout:1.0'\n    }\n ```\n \n\n### 公共方法\n``` code\n//设置此ViewGroup(在ListView,GridView,RecyclerView...中)所在的位置\nsetPosition(int position);\n//设置回调,调用此ViewGroup者实现此ViewGroup的OptionClickListener接口并调用该方法。\nsetOptionClickListener(OptionClickListener listener);\n```\n### 使用方法\n\n1.在layout目录下新建一个xml布局文件，命名自定义(例如:demo中的option_laout.xml)，内容格式如下\n\n``` xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cchen.capton.optionlayout.OptionLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:OptionLayout=\"http://schemas.android.com/apk/res-auto\" //自命名空间\n    android:layout_height=\"70dp\" //自定义高度\n    android:layout_width=\"match_parent\" \n    OptionLayout:leftOptionText=\"置顶\"  //左边按钮的文字\n    OptionLayout:leftTextSize=\"14sp\"    //左边按钮文字的大小 （若不写，默认14sp）\n    OptionLayout:leftTextColor=\"@android:color/white\"  //左边按钮的字体颜色\n    OptionLayout:rightOptionText=\"删除\"      //右边按钮的文字\n    OptionLayout:rightTextSize=\"14sp\"         //右边按钮文字的大小 （若不写，默认14sp）\n    OptionLayout:rightTextColor=\"@android:color/white\"  //右边按钮的字体颜色\n    \u003e\n    \u003cLinearLayout\n        android:orientation=\"horizontal\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\u003e\n\n          \u003c!--把你自己的item布局include进来--\u003e\n        \u003cinclude layout=\"@layout/left_item\"  /\u003e\n\n    \u003c/LinearLayout\u003e\n\n\u003c/chen.capton.optionlayout.OptionLayout\u003e\n``` \n2.在例如ListView中的BaseAdapter中的getView方法中使用\n\n(1)适配器实现接口以完成回调\n``` code\n   class Adapter extends BaseAdapter implements OptionLayout.OptionClickListener{\n       ...省略代码...\n         @Override\n        public void leftOptionClick(View view,int postition) {\n            //点击左边的按钮实现的事件，view为按钮对象，position为后续设置的item所在位置\n        }\n\n        @Override\n        public void rightOptionClick(View view,int postition) {\n             //点击右边的按钮实现的事件，view为按钮对象，position为后续设置的item所在位置\n        }\n\n        @Override\n        public void itemClick(View view,int postition) {\n             //点击整个item实现的事件，view为整个OptionLayout对象，position为后续设置的item所在位置\n        }\n   }\n``` \n(2)OptionLayout在适配器中的使用\n``` code\n   @Override\n        public View getView(int position, View convertView, ViewGroup parent) {\n            ViewHolder viewHolder=null;\n            if(convertView==null){\n                convertView= inflater.inflate(R.layout.option_layout,parent,false);//R.layout.option_layout即为我们自己写的一个xml文件，把它inflate进来就可以了\n                viewHolder=new ViewHolder(convertView);\n                convertView.setTag(viewHolder);\n            }else {\n                viewHolder= (ViewHolder) convertView.getTag();\n            }\n\n            ((OptionLayout)convertView).setOptionClickListener(this); //强转为我们的OptionLaout,为适配器回调事件，例如点击事件，以实现我们的效果\n            ((OptionLayout)convertView).setPosition(position);       // 设置OptionLayout这个View在ListView中的位置。\n            viewHolder.textView.setText(dataList.get(position));\n\n            return convertView;\n        }\n```\n### 作者的话\n 挺简单的一个自定义View，主要是实现了我想要效果就行，大家试试就行，源码仅供参考。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccapton%2Fandroid-optionlayout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fccapton%2Fandroid-optionlayout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccapton%2Fandroid-optionlayout/lists"}