2011-05-20 15 views
15

मेरा मूल लक्ष्य यहां एक मॉडल संवाद था, लेकिन आप जानते हैं, एंड्रॉइड इस प्रकार के संवाद का समर्थन नहीं करता था। वैकल्पिक रूप से, एक संवाद-थीम वाली गतिविधि का निर्माण संभवतः काम करेगा।
कोड यह रहा,एंड्रॉइड: पारदर्शी संवाद-थीम वाली गतिविधि कैसे बनाएं

public class DialogActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    setTheme(android.R.style.Theme_Dialog); 

    super.onCreate(savedInstanceState); 

    requestWindowFeature (Window.FEATURE_NO_TITLE); 

    Button yesBtn = new Button(this); 
    yesBtn.setText("Yes"); 
    yesBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      DialogActivity.this.finish(); 

     } 

    }); 

    this.setContentView(yesBtn); 
} 

हालांकि, पृष्ठभूमि हमेशा काला, जो वास्तव में भ्रमित था। लोगों को एक ही समस्या मिली,
http://code.google.com/p/android/issues/detail?id=4394
मैं इसे उपयोगकर्ता के लिए और अधिक संवाद-जैसा दिखाना चाहता हूं। तो, इस संवाद सक्रियता को पारदर्शी कैसे प्राप्त करें और अंतर्निहित स्क्रीन को कभी कवर न करें?
धन्यवाद।

यह मैं कैसे शैली

<style name="CustomDialogTheme" parent="android:Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">false</item> 
</style> 

उत्तर

22

बनाया आप इस से एक tranparent संवाद बना सकते हैं था।

public class DialogActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle(" "); 
     alertDialog.setMessage(""); 
     alertDialog.setIcon(R.drawable.icon); 
     alertDialog.setButton("Accept", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) {     
      } 
     }); 
     alertDialog.setButton2("Deny", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }); 
     alertDialog.show(); 
    } 
} 

इसके बाद बस को AndroidManifest.xml, जहाँ आप प्रकट में अपनी गतिविधि को परिभाषित में एक लाइन डाल दिया।

android:theme="@android:style/Theme.Translucent.NoTitleBar" 
+0

एंड्रॉइड: थीम = "@ एंड्रॉइड: स्टाइल/थीम। ट्रांसस्लुकेंट। नॉट टिटलेबार" संवाद विषय बदलता है, देखो और महसूस करता है। इस वजह से संवाद का पूरा यूआई बदल गया है। – Smeet

+0

मुझे लगता है कि आपको कन्स्ट्रक्टर का नया उपयोग करना चाहिए AlertDialog.builder (यह, R.style.Your_Dialog_Theme); – javmarina

2
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); 

और import android.graphics.drawable.ColorDrawable; on top :)

+1

अच्छा !! सरल और प्रभावी –

3
जवाब user824330 @ पर बस एक त्वरित अद्यतन

। चूंकि आपके पास AlertDialog.builder क्लास है, इसलिए इसका सही उपयोग क्यों नहीं किया जा रहा है? कई विधियों को अब हटा दिया गया है। अप-टू-डेट कोड इस के समान होगा:

public class DialogActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("title") 
     .setMessage("message") 
     .setIcon(R.drawable.ic_launcher) 
     .setPositiveButton("Yes", new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) {} 
     }) 
     .setNegativeButton("No", new OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) {} 
     }); 

    final AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

}

11

सबसे आसान तरीका है कि मैं पाया है गतिविधि के onCreate विधि कॉल में तो android:theme="@android:style/Theme.Holo.Dialog" को AndroidManifest में गतिविधि के विषय स्थापित करने के लिए है getWindow().setBackgroundDrawable(new ColorDrawable(0));

+1

आपके उत्तर के लिए धन्यवाद। Http://stackoverflow.com/questions/17459289/set-shape-background-to-transparent-in-android/17459644#17459644 देखें –

5

बस एक बात सभी प्रश्नों के उत्तर यहाँ में जोड़ने के लिए। व्यवहार की तरह एक पूर्ण संवाद को प्राप्त करने, आप खिड़की लेआउट पैरामीटर बदलकर संवाद स्थान बदल सकते हैं:

floating calculator

:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.x = ...; 
params.y = ...; 
params.width = ...; 
params.height = ...; 

this.getWindow().setAttributes(params); 

हम Tooleap एसडीके में एक अस्थायी गतिविधि प्रभाव को प्राप्त करने के लिए एक समान तकनीक का इस्तेमाल किया

संबंधित मुद्दे