2014-02-14 1 views
0

그래서 지난 몇 시간 동안 나를 괴롭혔습니다.외부 터치에서 대화창을 열고 외부 접촉을 잡는 방법은 무엇입니까?

내가 확장 한 대화 상자가 있는데, 짐작하면 Dialog입니다. 사용자가 대화 상자 바깥을 클릭하면 대화 상자를 닫고 싶지 않습니다. 간단하게이 줄을 사용할 수 있기 때문에 다소 쉽습니다. dialog.setCanceledOnTouchOutside(false). 그러나 사용자가 대화 상자 외부를 터치하면 특정 동작을 수행하려고합니다. 닫히지 않습니다 대화 상자가 (How to cancel an Dialog themed like Activity when touched outside the window?) 너무 쉽다는 것을 :

getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL); 
getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); 

그리고 사용자 정의 onTouchEvent(MotionEvent event)을 구현.

그러나 대화 상자를 닫을뿐만 아니라 기본 버튼, 예를 들어 버튼 등의 작업을 수행합니다. 다른 잠재적 인 답변 (비어 있음, false는 루트보기에서 onTouchListener를 반환하고, 터치가 대화 상자 안에 있는지 여부를 확인하는 등)도 게시물에서 시도했지만 아무 소용이 없습니다.

이제 내 질문은 : Dialog은 외부 클릭으로 닫히지 않으며 단추 및 기본 레이아웃/활동에 대한 작업을 수행하지 않지만 어떻게 알 수 있습니까? 사용자가 대화 상자 외부를 클릭합니까?

답변

0

나는 오히려 맞춤 레이아웃과 함께 DialogFragment를 사용하고자한다. 레이아웃에서 UI를 채우고 투명하게 될 뷰 그룹을 만듭니다 (레이아웃은 외부 클릭을 잡습니다). 이 레이아웃 안에 대화 상자를 넣으십시오. onCreateView에서 다음

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:id="@+id/background" 
       android:gravity="center" 
       android:background="@color/transparent"> 
... 
</LinearLayout> 

:

View view = inflater.inflate(R.layout.popup_exit, container, false); 

LinearLayout background = (LinearLayout) view.findViewById(R.id.background); 
background.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    Log.d("ExitDialogFragment", "onBackground click"); 
    } 
}); 

과에서 onCreate :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar); 
} 

을 테스트하고 작동합니다.

+0

@stealthjong 그것은 당신에게 효과가 있습니까? – czajna666

관련 문제