需要說明:1.可自由顯示在控件下方,並根據控件寬度顯示對應的寬度。
2.recycleView可自定義背景,並且可帶自定義顏色側滑欄
3.點擊外部消失,選中條目後消失
方法簡單抽取
private PopuWindow popupWindow;
public void showSelectWindows(TextView view,List<String> mDataList)
{
//獲取佈局中的recyclerView
RecyclerView recyclerView = (RecyclerView)LayoutInflater.from(ConferenceReservationActivity.this).inflate(R.layout.ry,null);
recyclerView.setBackgroundResource(R.drawable.shape_white_bg);
recyclerView.setScrollbarFadingEnabled(false);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//設置佈局管理器
recyclerView.setLayoutManager(layoutManager);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//設置Adapter
ConferenceAdapter adapter = new ConferenceAdapter(mDataList,Activity.this);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(new ConferenceAdapter.OnItemClickListener(){
view.setText(content);
popupWindow.dismiss();
});
popupWindow = new PopupWindow(recyclerView,view.getWidth(),300);
//設置點擊外部消失
popupWindow.setBackgroundDrawable(new ColorDrawable());
popupWindow.setFocusable(true)
//設定在指定view下顯示
popupWindow.showAsDropDown(view,0,10);
}
帶陰影圓角背景shape_white_bg代碼
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<padding
android:bottom="2px"
android:left="2px"
android:right="2px"
android:top="2px" />
<solid android:color="#0DCCCCCC" />
<corners android:radius="15dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<padding
android:bottom="2px"
android:left="2px"
android:right="2px"
android:top="2px" />
<solid android:color="#10CCCCCC" />
<corners android:radius="15dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<padding
android:bottom="2px"
android:left="2px"
android:right="2px"
android:top="2px" />
<solid android:color="#15CCCCCC" />
<corners android:radius="15dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<padding
android:bottom="2px"
android:left="2px"
android:right="2px"
android:top="2px" />
<solid android:color="#20CCCCCC" />
<corners android:radius="15dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<padding
android:bottom="2px"
android:left="2px"
android:right="2px"
android:top="2px" />
<solid android:color="#30CCCCCC" />
<corners android:radius="15dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<solid android:color="#14898989" />
<corners android:radius="15dp" />
<padding android:bottom="2px"
android:left="2px"
android:right="2px"
android:top="2px" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<corners android:radius="15dp" />
<solid android:color="#FFFFFF" />
<padding
android:bottom="3px"
android:left="3px"
android:right="3px"
android:top="3px" />
</shape>
</item>
</layer-list>
參考鏈接:https://www.jianshu.com/p/c72d19dafa75
rceycleView的佈局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:id="@+id/rv_notice"
android:scrollbars="vertical"
android:scrollSize="6dp"
android:fadeScrollbars="false"
android:scrollbarThumbVertical="@drawable/scorllview_button1"
android:scrollbarTrackVertical="@drawable/scorllview_bg"
android:scrollbarsStyle="insideOverlay"
android:layout_width="match_parent"
android:layout_height="550dp" />
設置側拉條背景drawable
scorllview_button1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius = "5.5dp"/>
<solid android:color = "#44825d5b"/>
</shape>
scrollview_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius = "5.5dp"/>
<solid android:color = "#226c5448"/>
</shape>
</item>
</layer-list>
adapter
public class ConferenceAdapter extends RecyclerView.Adapter<ConferenceAdapter.ViewHolder> {
private List<String> mList;
private Context mContext;
public ConferenceAdapter(List<String> list, Context context) {
mList = list;
mContext = context;
}
@NonNull
@Override
public ConferenceAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.conference_item,parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final ConferenceAdapter.ViewHolder holder, final int position) {
holder.rlItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener!=null)
onItemClickListener.onItemClick(mList.get(position),position);
}
});
holder.tvItem.setText(mList.get(position));
}
/**
* Returns the total number of items in the data set held by the adapter.
*
* @return The total number of items in this adapter.
*/
@Override
public int getItemCount() {
if (mList!=null&&mList.size()>0){
return mList.size();
}
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder{
private final RelativeLayout rlItem;
private final TextView tvItem;
public ViewHolder(View itemView) {
super(itemView);
rlItem = itemView.findViewById(R.id.rl_item);
tvItem = itemView.findViewById(R.id.tv_item);
}
}
public interface OnItemClickListener{
void onItemClick(String content,int position);
}
OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener mListener){
onItemClickListener = mListener;
}
}
item
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/rl_item"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_margin="5dp"
android:background="#ffffff">
<TextView
android:id="@+id/tv_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#777777"
android:textSize="18sp"
android:layout_centerInParent="true"/>
</RelativeLayout>