Android 사용자 정의 PopWindow QQ,위 챗 팝 업 메뉴 효과 구현
최종 적 으로 이 루어 진 후의 효과 가 어떤 지 먼저 살 펴 보고 아래 에 그림 을 올 립 니 다.
사용자 정의 팝 업 메뉴 는 계 승 된 popwin 입 니 다.view 가 바퀴 를 반복 할 필요 가 없 기 때 문 이 아 닙 니 다.특별한 효 과 를 얻 으 려 면 따로 말 합 니 다.우선 클래스 MyPopWindow 를 만들어 Popwindow 를 계승 합 니 다.
public class MyPopWindow extends PopupWindow implements View.OnClickListener {
private Context context;
private View view;
private LinearLayout scan;
private LinearLayout add;
public MyPopWindow(Context context) {
this(context, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
public MyPopWindow(Context context, int width, int height) {
super(context);
this.context = context;
setWidth(width);
setHeight(height);
setFocusable(true);
setOutsideTouchable(true);
setTouchable(true);
view = LayoutInflater.from(context).inflate(R.layout.layout_mypopwin,null);
setContentView(view);
scan = (LinearLayout) view.findViewById(R.id.scan);
add = (LinearLayout) view.findViewById(R.id.add);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.scan:
break;
case R.id.add:
break;
}
}
}
다음은 최초의 레이아웃 파일 을 드 리 겠 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textSize="16sp"/>
</LinearLayout>
<View
android:layout_width="wrap_content"
android:layout_height="0.5dp"
android:background="#cdcdcd"/>
<LinearLayout
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
activity 에서 사용자 정의 팝 업 메뉴 를 호출 하여 현재 효 과 를 봅 니 다.호출 된 코드 MyPopWindow win=new MyPopWindow(MainActivity.this,200,150);팝 업 메뉴 의 너비 와 높이 를 지정 하 였 습 니 다.주지 않 으 면 기본적으로 wrap 을 드 립 니 다.content,전체 화면의 너비 가 묻 습 니 다.이 모양 은 여전히 비교적 누추 하 다.현재 레이아웃 파일 에 9 그림 의 배경 그림 을 더 해서 효 과 를 보고 있다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/title_function_bg">
<LinearLayout
android:id="@+id/scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textSize="16sp"/>
</LinearLayout>
<View
android:layout_width="wrap_content"
android:layout_height="0.5dp"
android:background="#cdcdcd"/>
<LinearLayout
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
실행 후 효과좀 아름 답지 만 배경 뒤에 또 어떤 상황 이 있 습 니까?그러면 문제 가 생 겼 습 니 다.이 문 제 를 어떻게 해결 합 니까?그러면 popwin 의 구조 방법 에 setBackground Drawable(new BitmapDrawable()을 추가 하면 못 생 긴 사각형 배경 이 사라 집 니 다.
목표 효과 에 가 까 워 졌 습 니 다.현재 문 제 는 메뉴 항목 을 추가 할 때마다 수 동 으로 너비 와 높이 를 맞 추 는 것 이 귀 찮 습 니 다.높이,너비 에 적응 하려 면 레이아웃 파일 을 수정 해 야 합 니 다.안 드 로 이 드 가 item 의 컨트롤 을 자 유 롭 게 증가 시 킬 수 있다 는 것 을 생각해 보 세 요.먼저 떠 오 르 는 것 은 listview 입 니 다.레이아웃 파일 수정
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/title_function_bg">
<ListView
android:id="@+id/title_list"
android:layout_width="120dp"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:divider="@drawable/popu_line"
android:padding="3dp"
android:scrollingCache="false"
android:listSelector="@drawable/title_list_selector"/>
</LinearLayout>
그리고 사용자 정의 popwindow 를 수정 합 니 다.
public class CustomWin extends PopupWindow {
private Context context;
private View view;
private ListView listView;
private List<String> list;
public CustomWin(Context context) {
this(context, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
public CustomWin(Context context, int with, int height) {
this.context = context;
setWidth(with);
setHeight(height);
//
setFocusable(true);
//
setTouchable(true);
//
setOutsideTouchable(true);
setBackgroundDrawable(new BitmapDrawable());
view = LayoutInflater.from(context).inflate(R.layout.popwin_menu,null);
setContentView(view);
setAnimationStyle(R.style.popwin_anim_style);
initData();
}
private void initData() {
listView = (ListView) view.findViewById(R.id.title_list);
list = new ArrayList<String>();
list.add(" ");
list.add(" ");
list.add(" ");
list.add(" ");
//
listView.setAdapter(new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = null;
if (convertView == null) {
textView = new TextView(context);
textView.setTextColor(Color.rgb(255,255,255));
textView.setTextSize(14);
//
textView.setGravity(Gravity.CENTER);
//
textView.setPadding(0, 13, 0, 13);
// ( )
textView.setSingleLine(true);
} else {
textView = (TextView) convertView;
}
//
textView.setText(list.get(position));
//
textView.setCompoundDrawablePadding(0);
//
textView.setCompoundDrawablesWithIntrinsicBounds(R.mipmap., null, null, null);
return textView;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
});
}
}
최종 효과:이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.