PopupWindow(부동 상자)의 기본 사용
이 섹션 소개:
이 섹션에서 제공하는 내용은 정보를 표시하는 데 사용되는 마지막 UI 컨트롤인 PopupWindow(일시 중지 상자)입니다. 그 사람은 어떻게 생겼나요? 휴대폰에서 QQ를 열고 목록에 있는 항목을 길게 누르면 작은 검은색 메시지가 나타납니다. 대화 상자는 PopupWindow입니다. AlertDialog 대화 상자와는 달리 위치가 임의적일 수 있습니다.
또한 AlertDialog는 스레드 차단이 아닌 반면 PopupWindow는 스레드 차단입니다. 관계자는 이 문장을 소개합니다. PopupWindow:
임의의 뷰를 표시하는 데 사용할 수 있는 팝업 창입니다. 팝업 창은
현재 활동 위에 표시되는 부동 컨테이너입니다. 현재 액티비티 위에 float
이 컨트롤에 대해 알아봅시다~공식 문서: PopupWindow1. 관련 메서드의 해석
1) 일반적으로 사용되는 몇 가지 구성 메서드
문서에서 볼 수 있습니다. 우리에게 제공되는 PopupWindow의 생성 방법은 무려 9가지나 됩니다. 여기에는 실제 방법만 게시되어 있습니다. 개발에 일반적으로 사용되는 여러 구성 방법:
public PopupWindow(컨텍스트 컨텍스트)2) 일부 일반적으로 사용되는 방법
- public PopupWindow(View contentView, int width, int height)
- public PopupWindow(View contentView)
- public PopupWindow(View contentView, int width, int height, boolean focusable)
- 매개변수를 설명할 필요가 없습니다. contentView는 PopupWindow가 표시하는 뷰입니다. Focusable은 포커스가 표시되는지 여부를 보여줍니다.
다음은 가장 일반적으로 사용되는 방법 중 일부입니다. 다른 경우에는 문서를 직접 확인할 수 있습니다.
- setContentView(View contentView): PopupWindow
- getContentView(): PopupWindow
- showAsDropDown(View 앵커)에 의해 표시되는 뷰를 설정합니다. left), 오프셋 없음
- showAsDropDown(View 앵커, int xoff, int yoff): 특정 컨트롤의 위치를 기준으로 오프셋이 있습니다
- showAtLocation(View parent, int 중력, int x, int y ): 상위 컨트롤의 위치(예: 중앙 Gravity.CENTER, 하단 Gravity.BOTTOM 등)를 기준으로 오프셋을 설정하거나 오프셋을 설정하지 않을 수 있습니다. 추신: 상위 매개변수는 활동의 뷰만 있으면 됩니다!
- setWidth/setHeight: 너비와 높이를 설정합니다. 구성 방법에서 너비와 높이를 지정할 수도 있습니다. 특정 값을 쓰는 것 외에도 WRAP_CONTENT 또는 MATCH_PARENT를 사용할 수도 있습니다. popupWindow의 너비 및 높이 속성은 첫 번째 레이어 보기에 직접적으로 해당합니다.
- setFocusable(true): 포커스를 설정합니다. PopupWindow가 팝업된 후 모든 터치 스크린과 물리적 버튼이 PopupWindows에 의해 제어됩니다. 다루다. 다른 이벤트에 대한 응답은 PopupWindow가 사라진 후에 발생해야 합니다(홈과 같은 시스템 수준 이벤트 제외). 예를 들어, 이와 같은 PopupWindow가 나타날 때 뒤로 키를 누르면 먼저 PopupWindow가 사라지고, 두 번 누르면 종료됩니다. Activity를 정확하게 말하면 Activity를 종료하려면 먼저 PopupWindow를 사라지게 해야 합니다. 왜냐하면 뒤로를 눌러도 PopupWindow는 사라지지 않기 때문입니다. PopupWindow의 배경이 설정되어 있어야 합니다.
- setAnimationStyle(int): 애니메이션 효과 설정
2. 코드 예제
를 사용하여 렌더링 실행 :
키 코드 구현 :
먼저 붙여넣기 애니메이션 파일:anim_pop.xml:
<?xml version="1.0" 인코딩="utf-8"?>
<set xmlns:android="http://schemas.android.com/ apk/res/ android">
<alpha android:fromAlpha="0"
<alpha android:fromAlpha="0"
接着是popupWindow적布局:item_popip.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="match_parent"
android:Background="../style/images/ic_pop_bg"
android:orientation="vertical"> ;
<Button
android:id="@+id/btn_xixi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="嘻嘻"
android:textSize="18sp" />
<Button
android:id="@+id/btn_hehe"
android:layout_width="wrap_content"
android:layout_height="wrap_content "
android:padding= "5dp"
android:text="呵呵"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas. android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:Background="../style/images/ic_pop_bg"
android:orientation="vertical"> ;
<Button
android:id="@+id/btn_xixi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="嘻嘻"
android:textSize="18sp" />
<Button
android:id="@+id/btn_hehe"
android:layout_width="wrap_content"
android:layout_height="wrap_content "
android:padding= "5dp"
android:text="呵呵"
android:textSize="18sp" />
</LinearLayout>
MainActivity.java:
public 클래스 MainActivity는 AppCompatActivity를 확장합니다.{
private Button btn_show;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ㅋㅋㅋ @Override
public void onClick(View v) {
initPopWindow(v );
}
});
}
private void initPopWindow(View v) {
보기 보기 = LayoutInflater.from(mContext).inflate(R.layout.item_ 팝업, null, false);
버튼 btn_xixi = ( Button) view.findViewById(R.id.btn_xixi);
버튼 btn_hehe = (버튼) view.findViewById(R.id.btn_hehe);
//1.构造一个PopupWindow,参数依次是加载的View,宽高
final PopupWindow popWindow = new PopupWindow(view,
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
popWindow.setAnimationStyle(R.anim.anim_pop); //设置加载动画
//这些为了点击不PopupWindow区域,PopupWindow会消失的,如果没有下面的
//代码的话,你会发现,当你把PopupWindow显示流来了,无论你按多少次后退键
//PopupWindow并不会关闭,而且退不ute程序,加上下述代码可以解决这个问题
Popwindow.Settouch (True);
Popwindow.SettouchInterceptor (new view.onTouchListener () {
@vPerride
Public Boolean Ovelean t -VENT) {re Return false
// True로 돌아가면 Touch 이벤트가 발생합니다. 차단되면 Popupwindow의 onTouchevent가 호출되지 않으므로 외부 영역을 클릭하여 해제할 수 없습니다
}}); Popwindow가 활성화되도록 배경을 설정하세요
사용 사용 사용 사용 out out out off-right outps throughmbps throughmbps through out way's popupWindow에 표시할 through-to-after-‐view. Event _ BTN_XIXI.SetonClickListener (New View.onClickListener () {
@v@Public Void Onclick (View v) {
TOAST.MAKETEXT (MAINACTIVIS.THIS, "너" 클릭 히히~", toast.length_short) .show ( );
{
Toast.makeText(MainActivity.this, "클릭하셨어요 하하~", Toast .LENGTH_SHORT).show();
popWindow.dismiss();
}
}) 데모는 간단한 요구사항도 충족할 수 있어야 합니다. PopupWindow를 더 깊이 공부하고 싶다면 다음 참고자료를 읽어보세요.
안드로이드 PopupWindow 사용법 및 분석
Android PopupWindow에 대한 자세한 설명
자, 이상입니다. 감사합니다~private Button btn_show;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ㅋㅋㅋ @Override
public void onClick(View v) {
initPopWindow(v );
}
});
}
private void initPopWindow(View v) {
보기 보기 = LayoutInflater.from(mContext).inflate(R.layout.item_ 팝업, null, false);
버튼 btn_xixi = ( Button) view.findViewById(R.id.btn_xixi);
버튼 btn_hehe = (버튼) view.findViewById(R.id.btn_hehe);
//1.构造一个PopupWindow,参数依次是加载的View,宽高
final PopupWindow popWindow = new PopupWindow(view,
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
popWindow.setAnimationStyle(R.anim.anim_pop); //设置加载动画
//这些为了点击不PopupWindow区域,PopupWindow会消失的,如果没有下面的
//代码的话,你会发现,当你把PopupWindow显示流来了,无论你按多少次后退键
//PopupWindow并不会关闭,而且退不ute程序,加上下述代码可以解决这个问题
Popwindow.Settouch (True);
Popwindow.SettouchInterceptor (new view.onTouchListener () {
@vPerride
Public Boolean Ovelean t -VENT) {re Return false
// True로 돌아가면 Touch 이벤트가 발생합니다. 차단되면 Popupwindow의 onTouchevent가 호출되지 않으므로 외부 영역을 클릭하여 해제할 수 없습니다
}}); Popwindow가 활성화되도록 배경을 설정하세요
사용 사용 사용 사용 out out out off-right outps throughmbps throughmbps through out way's popupWindow에 표시할 through-to-after-‐view. Event _ BTN_XIXI.SetonClickListener (New View.onClickListener () {
@v@Public Void Onclick (View v) {
TOAST.MAKETEXT (MAINACTIVIS.THIS, "너" 클릭 히히~", toast.length_short) .show ( );
{
Toast.makeText(MainActivity.this, "클릭하셨어요 하하~", Toast .LENGTH_SHORT).show();
popWindow.dismiss();
}
}) 데모는 간단한 요구사항도 충족할 수 있어야 합니다. PopupWindow를 더 깊이 공부하고 싶다면 다음 참고자료를 읽어보세요.
안드로이드 PopupWindow 사용법 및 분석
Android PopupWindow에 대한 자세한 설명