简单粗暴 下拉菜单 dropdownMenu
2016-03-29 11:30
351 查看
第一篇博客,欢迎拍砖。
我要的是一个简单的下拉功能,popWindow不能满足,不想重写。然后在github转了半天,发现有些很牛的集成,但和需求对比,总是不大合适,于是自己写了个简单粗暴的下拉菜单。若需要嵌入到工程里面去,需根据项目的具体情况,自己动手去修改或封装。其实就是一布局,加listview,加存储,加点击事件,加动画而已。直接明了。
废话不多说,直接上代码。
布局文件
activity_main:
listview_item_layout 就一个textv和imageview,title_layot就几个textview,就不贴了,自己根据需要添加或删除。
java代码,其实很简单,大伙看了都明。
main_activity:
如若需要源码的,请点击下载 demo
下一篇有封装好的下拉菜单,如有兴趣的童鞋,请继续查看。
下拉菜单(二) PopupWindow 封装实现
我要的是一个简单的下拉功能,popWindow不能满足,不想重写。然后在github转了半天,发现有些很牛的集成,但和需求对比,总是不大合适,于是自己写了个简单粗暴的下拉菜单。若需要嵌入到工程里面去,需根据项目的具体情况,自己动手去修改或封装。其实就是一布局,加listview,加存储,加点击事件,加动画而已。直接明了。
废话不多说,直接上代码。
布局文件
activity_main:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <include android:id="@+id/my_title_bar" layout="@layout/title_bar_layout" /> <FrameLayout android:id="@+id/dropdown_fl" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone"> <View android:id="@+id/dropdown_mask" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/darker_gray" android:visibility="gone"/> <ListView android:id="@+id/dropdown_listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" android:background="@android:color/white" /> </FrameLayout> </LinearLayout>
listview_item_layout 就一个textv和imageview,title_layot就几个textview,就不贴了,自己根据需要添加或删除。
java代码,其实很简单,大伙看了都明。
main_activity:
public class MainActivity extends Activity { String TAG = "MainActivity-------"; //下拉状况 int dropdown_state; //菜单 LinearLayout my_dropdown; //菜单的文字 TextView dropdown_text; //菜单的图片 ImageView dropdown_image; //下拉的布局 FrameLayout dropdown_fl; //下拉的listview ListView my_listview; //下拉的阴影 View dropdown_mask; List<String> list = new ArrayList<String>(); ListViewAdapter adapter; private int MY_SETTING; //我的选定状态 private SharedPreferences.Editor mSettingsEd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SharedPreferences mSettingsSP = getPreferences(Activity.MODE_PRIVATE); mSettingsEd = mSettingsSP.edit(); MY_SETTING = mSettingsSP.getInt("mySetting", 0); initCommonView(); initValueBySetting(); initListData(); } private void initValueBySetting() { if (MY_SETTING == 0) { //状态为0时 dropdown_text.setText("123"); } else if (MY_SETTING == 1) {//状态为1时 dropdown_text.setText("456"); } else if (MY_SETTING == 2) { //状态为2时 dropdown_text.setText("789"); } else if (MY_SETTING == 3) { dropdown_text.setText("147"); } else { dropdown_text.setText("123"); } } private void initCommonView() { dropdown_fl = (FrameLayout) findViewById(R.id.dropdown_fl); my_listview = (ListView) findViewById(R.id.dropdown_listview); dropdown_mask = findViewById(R.id.dropdown_mask); View view = findViewById(R.id.my_title_bar); my_dropdown = (LinearLayout) view.findViewById(R.id.my_dropdown); dropdown_text = (TextView) view.findViewById(R.id.dropdown_text); dropdown_image = (ImageView) view.findViewById(R.id.dropdown_image); } private void initListData() { String[] listData = {"123", "456", "789", "147"}; for (int i = 0; i < listData.length; i++) { list.add(listData[i]); } my_dropdown.setOnClickListener(onClickListener); my_listview.setOnItemClickListener(onItemClickListener); dropdown_mask.setOnClickListener(onClickListener); } private View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.my_dropdown: dropdownClick(); break; case R.id.dropdown_mask: listViewOutAnim(); break; default: break; } } }; private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { String item = adapter.getItem(position).toString(); dropdown_text.setText(item); setTheSetting(position); listViewOutAnim(); } }; private void dropdownClick(){ if (dropdown_state ==1){ initDataToAdapter(); my_listview.setAdapter(adapter); listViewInAnim(); }else { listViewOutAnim(); } } private void setTheSetting(int position) { if (position == 0) { MY_SETTING = 0; mSettingsEd.putInt("mySetting", MY_SETTING); mSettingsEd.commit(); } else if (position == 1) { MY_SETTING = 1; mSettingsEd.putInt("mySetting", MY_SETTING); mSettingsEd.commit(); } else if (position == 2) { MY_SETTING = 2; mSettingsEd.putInt("mySetting", MY_SETTING); mSettingsEd.commit(); } else if (position == 3) { MY_SETTING = 3; mSettingsEd.putInt("mySetting", MY_SETTING); mSettingsEd.commit(); } } private void initDataToAdapter() { adapter = new ListViewAdapter(MainActivity.this, list) { @Override public View getView(final int position, View contentView, ViewGroup parent) { ViewHolder holder; if (contentView == null) { holder = new ViewHolder(); contentView = View.inflate(getBaseContext(), R.layout.layout_listview_item, null); holder.item_text = (TextView) contentView .findViewById(R.id.item_text); holder.item_image = (ImageView) contentView .findViewById(R.id.item_image); contentView.setTag(holder); } else { holder = (ViewHolder) contentView.getTag(); } String str = adapter.getItem(position).toString(); holder.item_text.setText(str); if (str.equals(dropdown_text.getText().toString())) { holder.item_image.setVisibility(View.VISIBLE); } else { holder.item_image.setVisibility(View.INVISIBLE); } return contentView; } }; } private void listViewInAnim() { dropdown_image.setImageResource(R.drawable.arrow_up); my_listview.clearAnimation(); my_listview.setVisibility(View.VISIBLE); my_listview.startAnimation(AnimationUtils.loadAnimation(this, R.anim.dd_menu_in)); dropdown_mask.setVisibility(View.VISIBLE); dropdown_mask.startAnimation(AnimationUtils.loadAnimation(this, R.anim.dd_mask_in)); dropdown_fl.setVisibility(View.VISIBLE); dropdown_state = 2; } private void listViewOutAnim() { dropdown_image.setImageResource(R.drawable.arrow_down); my_dropdown.setClickable(true); my_listview.clearAnimation(); my_listview.setVisibility(View.GONE); my_listview.startAnimation(AnimationUtils.loadAnimation(this, R.anim.dd_menu_out)); dropdown_mask.setVisibility(View.GONE); dropdown_mask.startAnimation(AnimationUtils.loadAnimation(this, R.anim.dd_mask_out)); dropdown_fl.startAnimation(AnimationUtils.loadAnimation(this, R.anim.dd_mask_out)); dropdown_fl.setVisibility(View.GONE); dropdown_state = 1; } private class ViewHolder { public TextView item_text; public ImageView item_image; } @Override protected void onDestroy() { super.onDestroy(); } }
如若需要源码的,请点击下载 demo
下一篇有封装好的下拉菜单,如有兴趣的童鞋,请继续查看。
下拉菜单(二) PopupWindow 封装实现
相关文章推荐
- docker 入门
- 关于包含0长数组的结构体对齐问题(C语言 Linux_x64 GNU编译器)
- Docker下使用stress进行压力测试
- Warshell's Algorithms
- Opengl坐标系 坐标变换 笔记
- linux内核串口控制器注册以及收发
- Nginx 配置从零开始
- linux 命令(1)
- CentOS 解决Device eth0 does not seem to be present和ifconfig有其他网卡IP
- 让Mac中的TexShop支持中文
- Linux ssh安全设置,及免密码登录
- Corosync/Pacemaker+DRBD实现高可用集群与DRBD共享
- 查询手机或邮箱注册过哪些网站
- 收集Android架构
- shell 脚本:使用过程中使得变量能够赋值
- 【OpenCV】VS2010与OpenCV2.4.11的配置
- linux crontab定时执行任务
- linux下内存
- Centos 7.0 虚拟机迁移网卡问题
- CentOS7使用virt-p2v将RHEL6.7的物理机转化为kvm虚拟机