Android 사용자 정의 구성 요소 ListPopWindow
7389 단어 Android사용자 정의 구성 요소ListPopWindow
효과 가 바로 이 렇 습 니 다.실현 을 보 세 요.어렵 지 않 습 니 다.바로 어린이 들 이 사용 할 수 있 도록 원천 을 개척 하고 싶 습 니 다.불합리한 부분 이 있 으 면 많은 지적 을 바 랍 니 다.
1.사용자 정의 PopWindow
우선,이러한 효 과 는 분명 PopWindow 에 listview 가 내장 되 어 있 는 것 이 고,위의 title 과 아래 의 cancel 은 두 텍스트 상자 로 이 루어 지 는 것 도 간단 하 다.
그리고 PopWindow 에서 두 개의 인 터 페 이 스 를 설명 하여 cancel 과 item 의 클릭 이 벤트 를 되 돌 립 니 다.
public interface OnPopItemClickListener{
void onPopItemClick(View view,int position);
}
public interface OnBottomTextviewClickListener{
void onBottomClick();
}
그리고 PopWindow 의 속성 을 설정 합 니 다.
parentView = LayoutInflater.from(context).inflate(R.layout.list_popwindow,null);
setContentView(parentView);
lv = (ListView) parentView.findViewById(R.id.lv_popwindow);
//
this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
//
this.setFocusable(true);
// ColorDrawable
ColorDrawable dw = new ColorDrawable(0xb0000000);
// SelectPicPopupWindow
this.setBackgroundDrawable(dw);
전체 코드 를 보 세 요.
public class ListPopWindow extends PopupWindow{
private Context context; //
private View parentView; //
private List<PopBean> dataList; //item
private OnPopItemClickListener listener; //item
private ListView lv; //item
private View viewTop; //title
private String topText,bottomText; //title ,bottom
private TextView tvTop,tvBottom; //title ,bottom
private PopWindowAdapter adapter; //
private OnBottomTextviewClickListener bottomListener;//
public interface OnPopItemClickListener{
void onPopItemClick(View view,int position);
}
public interface OnBottomTextviewClickListener{
void onBottomClick();
}
public ListPopWindow(Context context,OnPopItemClickListener listener,OnBottomTextviewClickListener bottomListener,
View parentView,List<PopBean> dataList,String bottomText,String topText){
this.context = context;
this.listener = listener;
this.parentView = parentView;
this.dataList = dataList;
this.bottomListener = bottomListener;
this.topText = topText;
this.bottomText = bottomText;
initViews();
}
private void initViews(){
parentView = LayoutInflater.from(context).inflate(R.layout.list_popwindow,null);
setContentView(parentView);
lv = (ListView) parentView.findViewById(R.id.lv_popwindow);
//
this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
//
this.setFocusable(true);
// ColorDrawable
ColorDrawable dw = new ColorDrawable(0xb0000000);
// SelectPicPopupWindow
this.setBackgroundDrawable(dw);
//view OnTouchListener
parentView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = parentView.findViewById(R.id.ll_bottom).getTop();
int y = (int) event.getY();
if (event.getAction() == MotionEvent.ACTION_UP) {
if (y > height) {
dismiss();
}
}
return true;
}
});
update();
viewTop = parentView.findViewById(R.id.view_line1);
tvBottom = (TextView) parentView.findViewById(R.id.tv_popwindow_bottom);
tvTop = (TextView) parentView.findViewById(R.id.tv_popwindow_first);
adapter = new PopWindowAdapter(context,dataList,false);
lv.setAdapter(adapter);
if (!TextUtils.isEmpty(topText)){
tvTop.setVisibility(View.VISIBLE);
tvTop.setText(topText);
viewTop.setVisibility(View.VISIBLE);
}
else {
tvTop.setVisibility(View.GONE);
viewTop.setVisibility(View.GONE);
}
if (!TextUtils.isEmpty(bottomText)){
tvBottom.setVisibility(View.VISIBLE);
tvBottom.setText(bottomText);
}
else {
tvBottom.setVisibility(View.GONE);
}
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
listener.onPopItemClick(view, i);
}
});
tvBottom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bottomListener.onBottomClick();
}
});
}
}
2.아 이 템 의 bean 보기여기 서 title 과 그림 의 id 를 밝 혔 습 니 다.
package com.hankkin.library;
public class PopBean {
private String title;
private int icon_res;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getIcon_res() {
return icon_res;
}
public void setIcon_res(int icon_res) {
this.icon_res = icon_res;
}
public PopBean(String title, int icon_res) {
this.title = title;
this.icon_res = icon_res;
}
}
3.사용자 정의 어댑터 어댑터이 안에서 주의해 야 할 것 은 아 이 템 의 배경 설정 입 니 다.어떤 것 은 상반부 원 각,어떤 것 은 하반부 원 각 입 니 다.특별히 처리 하 세 요.
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if (view == null) {
view = inflater.inflate(R.layout.listview_popwindow_item, null);
holder = new ViewHolder();
holder.tv_name = (TextView) view.findViewById(R.id.tv_title);
holder.v_line = (View) view.findViewById(R.id.v_line);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.tv_name.setText(dataList.get(i).getTitle());
if (dataList.size() - 1 == i) {
holder.v_line.setVisibility(View.INVISIBLE);
holder.tv_name.setBackground(context.getResources().getDrawable(R.drawable.selector_bottom_half));
} else {
holder.v_line.setVisibility(View.VISIBLE);
holder.tv_name.setBackground(context.getResources().getDrawable(R.drawable.list_gray_item));
}
return view;
}
마지막 으로 호출 을 보 겠 습 니 다.Activity 는 item 인터페이스(OnPopItemClickListener)와 아래쪽 단추 인터페이스(OnBottomTextview ClickListener)를 실현 해 야 합 니 다.
public void show(View view){
List<PopBean> pops = new ArrayList<>();
for (int i=0;i<5;i++){
PopBean pop = new PopBean("item"+i,0);
pops.add(pop);
}
popWindow = new ListPopWindow(MainActivity.this,this,this,rl,pops,"cancel","title");
popWindow.showAtLocation(rl, Gravity.CENTER| Gravity.BOTTOM,0,0);
}
이상 이 바로 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.