2010-06-10 30 views
9

ListItemClick olayında listactivity bir pop-up penceresi oluşturuyorum.Android'de açılan pencere boyutu

LayoutInflater inflater = (LayoutInflater) 
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View pop = inflater.inflate(R.layout.popupcontact, null, false); 
ImageView atnot = (ImageView)pop.findViewById(R.id.aNot); 
height = pop.getMeasuredHeight(); 
width = pop.getMeasuredWidth(); 
Log.e("pw","height: "+String.valueOf(height)+", width: "+String.valueOf(width)); 
atnot.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     pw.dismiss(); 
    } 
}); 

pw = new PopupWindow(pop, width, height, true); 

// The code below assumes that the root container has an id called 'main' 
//pw.showAtLocation(v, Gravity.CENTER, 0, 0); 
pw.showAsDropDown(v, 10, 5); 

Şimdi, yükseklik ve genişlik değişkenler açılır pencere (popupcontact) için kullanılan düzen yüksekliği ve genişliği olması gerekiyordu. Ama 0 döndürüyorlar. Sanırım bu, düzenin henüz işlenmemiş olması. Herkesin bir ipucu var mı, mutlak piksel sayılarını kullanmanıza gerek kalmadan pop-up penceresinin boyutunu nasıl kontrol edebilirim?

cevap

2

Kodunuzun çalışacağını düşünmüyorum çünkü, açılan pencerenin alt öğesi olan görünümün genişliğini ve yüksekliğini elde etmeye çalışıyorsunuz.

popupwindow'u "v" görünümüne sabitlediğiniz için, genişlik ve yüksekliği bağlantı görünümüne göre (veya bunlara bağlı olarak) ayarlayabilir misiniz?

1

Bir Popup penceresi oluşturmak istiyorsanız, Creating Dialogs'a bir göz atın. Diyaloğunuzda tam bir View View kullanmak istiyorsanız, bu question numaralı telefona bir göz atın, kabul edilen yanıt hakkındaki yorumları okuduğunuzdan emin olun. Bence bu görüntüyü yaratmak için PopupWindow'u kullanmaya gerek yok ve diyaloglar sizi daha kolay bir sonuca götürecek.

PopupWindow ile sabitlemek istiyorsanız ve pencerenizin genişliğini ve yüksekliğini değiştirmek istemiyorsanız PopupWindow için başka bir constructor kullanın, yükseklik ve genişliğe ihtiyaç duymayan bazı kullanılabilir. Pencereye odaklanma yeteneği için boolean almazlar, ancak bunu daha sonra setFocusable() aracılığıyla değiştirebilirsiniz.

43

Benzer bir sorunla karşılaştım. Ben arayarak çözüldü:

pop.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 

+2

Am da aynı sorunu bakan) getMeasuredHeight() ve getMeasuredWidth (ile düzen boyutunu almadan önce. Bu çalışır, ancak yukarıdaki kod özgün – vignesh

+1

yukarıdaki kodu bana boş bir işaretçi istisnası verir. – Amrut