Soru Android: şeffaf bir diyalog temalı etkinlik nasıl oluşturulur?


Orijinal hedefim kalıcı bir diyalogdu, ama biliyorsunuz, Android bu tür bir iletişim kutusunu desteklemiyordu. Alternatif olarak, bir diyalog temalı etkinlik oluşturmak muhtemelen işe yarayacaktır.
İşte kod

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);
}

Ancak, arka plan her zaman siyahtı, bu gerçekten kafa karıştırıcıydı. İnsanlar aynı soruna sahipler.
http://code.google.com/p/android/issues/detail?id=4394
Sadece kullanıcı için daha fazla diyalog gibi görünmesini istiyorum. Yani, bu DialogActivity nasıl şeffaf hale getirilir ve asla alttaki ekranı kapsamaz?
Teşekkürler.

Bu stili nasıl yarattım

<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>

16
2018-05-20 10:20


Menşei




Cevaplar:


Bununla şeffaf bir diyalog oluşturabilirsiniz.

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();
    }
}

Bundan sonra, AndroidManifest.xml dosyasında, etkinliğinizi manifest'te tanımladığınız bir satır ekledikten sonra.

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

22
2017-07-05 13:28



android: theme = "@ android: style / Theme.Translucent.NoTitleBar" iletişim temasını değiştirir, bak ve hisseder. Bu nedenle iletişim kutusunun eksiksiz UI'si değiştirildi. - Smeet
Bence kurucu yeni AlertDialog.Builder'i kullanmalısın (bu, R.style.Your_Dialog_Theme); - javmarina


Bulduğum en kolay yol, AndroidManifest'te etkinliğin temasını ayarlamaktır. android:theme="@android:style/Theme.Holo.Dialog" sonra etkinliğin onCreate yöntemi çağrısı getWindow().setBackgroundDrawable(new ColorDrawable(0));


11
2018-06-12 11:05



Cevabınız için teşekkürler. Görmek stackoverflow.com/questions/17459289/... - Cote Mounyo


Buradaki tüm cevaplara eklemek için sadece bir şey. Tam bir diyalog gibi davranışı elde etmek için, pencere düzeni paramlarını değiştirerek diyaloğu yeniden konumlandırabilirsiniz:

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

this.getWindow().setAttributes(params);

Tooleap SDK'da yüzen bir etkinlik efekti elde etmek için benzer bir teknik kullandık:

floating calculator


5
2018-05-08 10:20





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

ve import android.graphics.drawable.ColorDrawable; on top :)


3
2017-12-12 09:53



İyi!! basit ve etkili - Dario Bruzzese


Sadece @ user824330 cevabında hızlı bir güncelleme. AlertDialog.Builder sınıfına sahip olduğunuzdan, neden uygun şekilde kullanmıyorsunuz? Birçok yöntem artık kullanımdan kaldırıldı. Güncel kod buna benzer:

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();
}

}


3
2018-03-13 13:20





DialogFragment oluşturmadan daha iyi olabilir ve iletişim kutusunu setcontentview ile özelleştirebilirsiniz.

http://developer.android.com/reference/android/app/DialogFragment.html


0
2018-06-12 18:23