2012-10-12 1 views
3

나는 단순히 회전 진행 대화 상자를 만들려고합니다. 텍스트 없음, 테두리 없음, 배경 없음. 내용 상단의 화면 중앙에 가볍게 회전하는 회전 알림.사용자 지정 ProgressDialog가 Dialog 또는 ProgressDialog를 확장합니까?

이 사용자 지정 대화 상자를 만들 때 두 가지 스택 오버플로 질문을 보았습니다.

그들은 모두이 스타일을 사용 : 처음에

public class MyProgressDialog extends ProgressDialog { 

    public MyProgressDialog(Context context) { 
     super(context, R.style.NewDialog); 

    } 

} 

하나는 대화를 확장하고 사용자 지정 내용을 많이 포함

<style name="NewDialog" parent="@android:style/Theme.Dialog"> 

    <item name="android:windowFrame">@null</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowTitleStyle">@null</item> 
    <item name="android:colorBackground">#ffffff</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
    <item name="android:backgroundDimEnabled">true</item> 
    <item name="android:width">600dip</item> 
    <item name="android:height">100dip</item> 
    <item name="android:textColor">#FF0000</item> 

</style> 

그러나 자바 측에서

을, 다른 하나는 단순히 이것이다 (대화 상자 확장) 빈칸이 생깁니다. 대화 상자가 없습니다. 아무것도. 위의 코드 샘플에서는 중심에 있지 않은 블랙 박스 안에 축소 된 작은 대화 상자가 나타납니다.

어떤 방법이 더 정확하며이를 구현하는 방법에 대한 샘플을 얻을 수 있습니까?

또한 어떻게 대화 상자를 투명/경계선으로 만들 수 있습니까?

답변

12

지금이 작업을 수행 할 수있는 '올바른 방법'는, 현재 안드로이드 세계에서 프로그래밍되지 않은 호환성 라이브러리를 사용하지 않는 경우

DialogFragment http://developer.android.com/reference/android/app/DialogFragment.html을 확장하는 것입니다.

Dialog를 확장하려면 여기에 몇 가지 예제 코드가 있습니다. https://github.com/tom-dignan/nifty/tree/master/src/com/tomdignan/nifty/dialogs이 코드에서는 Dialog를 확장하여 일종의 '진행 대화 상자'를 구현했습니다. 나는 Dialog를 확장했다. 왜냐하면 나는 완전한 제어를 원했기 때문에 Dialog가 전체 화면이되기를 원했다.

위의 DialogFragment doc을 읽고이를 사용하는 것이 좋습니다.

정말 여기에는 옳은 방법이나 잘못된 방법이 없습니다. 세 클래스 중 하나를 확장해도 작동하지만 가장 깨끗하고 최신의 것은 DialogFragment 방식입니다.

+0

이 라이브러리를 실제로 사용하고 있습니다. 나는 이것을 시도하고보고 할 것이다. 감사. – KickingLettuce

+0

또한 DialogFragment를 확장하면 내가 만드는 사용자 정의 모양이 지원됩니까? 투명/경계선 없는가? – KickingLettuce

+2

당신은 스타일과 테마로 그것을 완벽하게 제어 할 수 있습니다 : DialogFragment.STYLE_NO_TITLE, DialogFragment.STYLE_NO_FRAME 등. onCreateView에서 생성 한 뷰를 완벽하게 제어 할 수 있습니다. 팁 : 이식성을 위해 무언가를 '투명하게'만들려면 # 00000100 –

4

사용자 지정 대화 상자를 사용하여 No_Title 기능을 요청하고 배경 drawable 리소스를 투명하게 설정하는 한 가지 방법이 있습니다.

다음 코드를 사용할 수 있습니다. Android 4.0.3 ICS에서 작성하고 테스트했습니다.

레이아웃 폴더의 XML 레이아웃은은, 다음과 같이 대화 상자를 표시하고 투명하게하기 dialog_progress.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:orientation="vertical"> 

    <ProgressBar 
     android:id="@+id/dialogProgressBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"/> 

</LinearLayout> 

자바 코드를 말한다.

Dialog dialog = new Dialog (this); 

dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); 
dialog.setContentView (R.layout.dialog_progress); 
dialog.getWindow().setBackgroundDrawableResource (android.R.color.transparent); 
dialog.show(); 
+1

을 사용하십시오. ProgressDialog에서는 작동하지 않습니다. –

2

사용자 지정 진행 대화 상자를 만드는 대신 ImageView에서 프레임별로 애니메이션을 사용하면 비슷한 결과를 얻을 수 있습니다. 이를 위해서는 일련의 이미지가 필요합니다 (모든 GIF에서 추출 할 수 있음). 그런 다음 프레임별로 애니메이션을 적용 할 수 있습니다. 그것은 당신이 원하는 것을 정확하게 할 것입니다.나는 아래의 코드와 비슷한 짓을

- : 프레임 애니메이션으로 프레임

// XML

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
android:oneshot="false" > 

<item 
    android:drawable="@drawable/frame00" 
    android:duration="150"/> 
<item 
    android:drawable="@drawable/frame01" 
    android:duration="150"/> 
<item 
    android:drawable="@drawable/frame02" 
    android:duration="150"/> 
<item 
    android:drawable="@drawable/frame03" 
    android:duration="150"/> 
<item 
    android:drawable="@drawable/frame04" 
    android:duration="150"/> 
<item 
    android:drawable="@drawable/frame05" 
    android:duration="150"/> 
<item 
    android:drawable="@drawable/frame06" 
    android:duration="150"/> 

애니메이션을 시작하기위한

자바 코드 : -

ImageView iv = (ImageView)findViewById(R.id.progressDialog); 
iv.setBackgroundResource(R.anim.progress_dialog_icon_drawable_animation); 
AnimationDrawable aniFrame = (AnimationDrawable) iv.getBackground(); 
aniFrame = (AnimationDrawable) iv.getBackground(); 
aniFrame.start(); 

I achieved this from the above code

희망이 있습니다!