android PopupWindow巢狀ListView(模仿分類下拉選單效果)
阿新 • • 發佈:2019-01-05
先看下UI效果
這就是使用PopupWindow巢狀ListView實現的,這個簡單,不做多介紹直接上程式碼
1:佈局檔案
背景圖片如下:<span style="font-size:18px;"><RelativeLayout 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" > <TextView android:id="@+id/tv_text_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/choolse_bg" android:text="不限" android:paddingLeft="12dp" android:textColor="#9d72d2" android:layout_centerInParent="true" android:gravity="center_vertical" /> </RelativeLayout></span>
package com.example.demo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { private TextView tv_text_age; private PopupWindow pop; ListView listView = null; private List<String> datas; private SelectAgeAdapter mSelectAdapter; private LayoutInflater inflater; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); inflater = LayoutInflater.from(this); tv_text_age = (TextView) findViewById(R.id.tv_text_age); tv_text_age.setOnClickListener(this); } private void initData() { datas = new ArrayList<String>(); for(int i=0;i<50;i++){ datas.add("helloworld-"+i); } } @Override public void onClick(View v) { if(v.getId()==R.id.tv_text_age){ if(pop == null){ listView = new ListView(this); listView.setDividerHeight(1); listView.setBackgroundResource(R.drawable.kge_feek_bg); listView.setCacheColorHint(0x00000000); mSelectAdapter = new SelectAgeAdapter(); pop = new PopupWindow(listView, tv_text_age.getWidth(), LayoutParams.WRAP_CONTENT, true); } listView.setAdapter(mSelectAdapter); pop.setBackgroundDrawable(new ColorDrawable(Color.RED));// pop.showAsDropDown(tv_text_age, 0, 0); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { tv_text_age.setText(datas.get(position)); dismissPopWindow(); } }); } } public void dismissPopWindow(){ if(pop!=null&&pop.isShowing()){ pop.dismiss(); } } class SelectAgeAdapter extends BaseAdapter{ @Override public int getCount() { return datas!=null&&datas.size()>0?datas.size():0; } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ holder = new ViewHolder(); convertView = inflater.inflate(R.layout.item, null); holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.tv_name.setText(datas.get(position)); return convertView; } } class ViewHolder{ TextView tv_name; } }
實現效果: