简单粗暴 下拉菜单 dropdownMenu

来源:互联网 发布:淘宝超级品牌日 编辑:程序博客网 时间:2024/05/18 16:37

第一篇博客,欢迎拍砖。

我要的是一个简单的下拉功能,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 封装实现


2 0
原创粉丝点击