创建一个popwindow 并动态设置pop的高度 限定pop高度
这里举个例子,pop里面放的是一个listview
直接上代码
SelectMedicalCasePopwindow。java
public class SelectMedicalCasePopwindow extends PopupWindow implements OnClickListener, AdapterView.OnItemClickListener {
private TextView tv;
private View mMenuView;
private Context context;
private Handler callback;
private ListView mMyListView;
private String[] items;
private Button mButton;
private ChatHistoryAdapter mAdapter;
public SelectMedicalCasePopwindow(Activity con, List<String> itemList) {
this(con, itemList.toArray(new String[itemList.size()]));
}
public SelectMedicalCasePopwindow(Activity con, String[] items) {
super(con);
this.context = con;
this.items = items;
int scrheight = DensityUtil.getScreenHeight(context) / 2;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.select_medical_case_pop, null);
mAdapter = new ChatHistoryAdapter();
mMyListView = (ListView) mMenuView.findViewById(R.id.bithday_layout);
View listItem = mAdapter.getView(0, null, mMyListView);
listItem.measure(0, 0);
int relheight = listItem.getMeasuredHeight();
UtilsLog.d(scrheight);
UtilsLog.d(relheight);
this.setContentView(mMenuView);
this.setWidth(LayoutParams.MATCH_PARENT);
if(relheight * items.length > scrheight){
LayoutParams layoutParams = mMyListView.getLayoutParams();
layoutParams.width = LayoutParams.MATCH_PARENT;
layoutParams.height = scrheight;
mMyListView.setLayoutParams(layoutParams);
//this.setHeight(scrheight);
} else {
}
this.setHeight(LayoutParams.WRAP_CONTENT);
// 设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(true);
// 设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.AnimBottom);
// 实例化一个ColorDrawable颜色为半透明
ColorDrawable dw = new ColorDrawable(0xb0000000);
// 设置SelectPicPopupWindow弹出窗体的背景
this.setBackgroundDrawable(dw);
// mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
mMenuView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = mMenuView.findViewById(R.id.bithday_layout_lin).getTop();
int y = (int) event.getY();
if (event.getAction() == MotionEvent.ACTION_UP) {
if (y < height) {
dismiss();
}
}
return true;
}
});
mButton = (Button) mMenuView.findViewById(R.id.btn_cancel);
mButton.setOnClickListener(this);
mMyListView.setAdapter(mAdapter);
mMyListView.setOnItemClickListener(this);
this.update();
}
@Override
public void showAtLocation(View parent, int gravity, int x, int y) {
super.showAtLocation(parent, gravity, x, y);
this.tv = (TextView) parent;
}
public void showAtLocationNoSetText(View parent, int gravity, int x, int y, Handler callback) {
super.showAtLocation(parent, gravity, x, y);
this.callback = callback;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_cancel:
this.dismiss();
if (callback != null) {
callback.sendEmptyMessage(0);
}
break;
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (callback != null) {
Message msg = callback.obtainMessage(1, position, 0);
callback.sendMessage(msg);
}
dismiss();
}
class ChatHistoryAdapter extends BaseAdapter {
@Override
public int getCount() {
return items.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ChatHistoryHolder holder;
if (convertView == null) {
holder = new ChatHistoryHolder();
convertView = View.inflate(context, R.layout.view_chat_select_case_item, null);
holder.clnic_doctor_item_time_tv = (TextView) convertView.findViewById(R.id.btn_myquestion_first);
convertView.setTag(holder);
} else {
holder = (ChatHistoryHolder) convertView.getTag();
}
holder.clnic_doctor_item_time_tv.setText(items[position]);
return convertView;
}
class ChatHistoryHolder {
TextView clnic_doctor_item_time_tv;
}
}
}
select_medical_case_pop.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bithday_layout_lin"
android:background="@color/white">
<TextView
android:id="@+id/choose_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="13dip"
android:text="选择病例"
android:gravity="center"
android:layout_centerInParent="true"
android:textColor="@color/text_color_959595"
android:textSize="@dimen/text_size_22px" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dip"
android:layout_below="@+id/choose_txt"
android:background="@color/text_color_cccccc" />
</RelativeLayout>
<LinearLayout
android:id="@+id/bithday_layout_lin"
android:layout_width="match_parent"
android:layout_above="@+id/bithday_layout1"
android:background="@color/white"
android:layout_height="wrap_content">
<ListView
android:id="@+id/bithday_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:divider="@color/text_color_cccccc"
android:dividerHeight="0.1dp" />
</LinearLayout>
<View
android:id="@+id/bithday_layout1"
android:layout_width="match_parent"
android:layout_height="10dip"
android:layout_above="@+id/layout_cancel"
android:background="#f2f5f7" />
<LinearLayout
android:id="@+id/layout_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@color/white"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="@dimen/height50"
android:background="@drawable/freeclinics_btn_click_bg"
android:gravity="center"
android:text="取 消"
android:textColor="@color/content"
android:textSize="@dimen/text_size_20px" />
</LinearLayout>
</RelativeLayout>
view_chat_select_case_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dip"
android:background="@drawable/freeclinics_btn_click_bg">
<TextView
android:id="@+id/btn_myquestion_first"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/freeclinics_btn_click_bg"
android:gravity="center"
android:padding="13dip"
android:text="男"
android:textColor="@color/content"
android:textSize="@dimen/text_size_22px" />
</LinearLayout>