您的位置:首页 > 运维架构

简单粗暴 下拉菜单 dropdownMenu

2016-03-29 11:30 351 查看
第一篇博客,欢迎拍砖。

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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: