2012-11-08 30 views
9

benim Diyalog I'de (düğme ve arka plan için) özel bir iletişim kutusu oluşturmak için ben android.app.Dialog android kullanmak ben perfecly bu gösteri istediğim nasıl kısa bir metin varken bir ScrollView içinde bir TextView olup da Metin çok büyük Benim Dialog tam Ekranı almak ve ben diyalog ve ekranın kenarı arasında minimum Marj sahip olmak istiyorum.Android: Diyalog asgari marjı

Sorunum Diyalog ihtiyacı sonra büyük olamaz istiyorum ve bu konuda bir düzeltme boyutunu ayarlamak olamaz?

Here is how this look today.....I what a margin like this

How my Dialog is now.I want a margin like this.


GameDialog.java

public class GameDialog extends Dialog { 

    public GameDialog(Context ct, int titleID, int messageID) { 
     super(ct, R.style.dialog_style); 
     this.setContentView(R.layout.dialog_layout); 

    } 
    // This exist more code but this has noting with the layout to do,only set the text and show the button that exist since the XML file. 

} 

R.style.dialog_style

<style name="dialog_style" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowBackground">?button_image</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:textColor">#FF000000</item> 
    <item name="android:textSize">20sp</item> 
</style> 

R.layout.dialog_layout

<?xml version="1.0" encoding="utf-8"?> 


<!-- Dialog layout that show title and a textarea, and under this allow a row of button that is center layout. --> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="14px" 
        android:layout_marginRight="14px"> 


     <TextView 
      android:layout_gravity="center_vertical"  
      android:id="@+id/text_title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
     </TextView> 

    </LinearLayout> 

    <LinearLayout android:orientation="vertical"  
        android:layout_width="fill_parent" 
        android:layout_height="0px" 
        android:layout_weight="1" 
        android:layout_marginLeft="14px" 
        android:layout_marginRight="14px"> 

     <ScrollView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
     > 

      <TextView android:id="@+id/text_main" 
         android:padding="5px" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
      > 
      </TextView> 

     </ScrollView> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/layout_button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="horizontal"> 
      <!-- this will be show while need to show a button --> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
    </LinearLayout> 
</LinearLayout> 
+0

Üzgünüm, benim ilk cevap sorunuzu yanlış. –

+0

Sorun değil, başka idesiniz var mı? –

+0

Güncelleme yanıtı. –

cevap

11

Çerçeve aslında bunu arka plan görüntüleri üzerinde yapar. Eğer çerçeve için tanımlanan tema bir göz varsa Başka bir deyişle, onların windowBackground nitelik sadece açık bir renk, yani geçerli:

<item name="android:windowBackground">@android:color/transparent</item> 

Ve sonra kök düzen öğesi üzerine yerleştirilmiş arka plan görüntüsü bir 9- olduğunu Tüm tarafların etrafına yerleşik dolguya sahip olan yama (görüntü içine yerleştirilen fazladan boşluk, böylece görüntü ekranın üzerine geldiğinde ekranın kenarlarını görmeye devam edebilirsiniz). I (link) ne anlama hakkında bir fikir edinmek için AOSP kaynağından panellerden birinde bir bakın.

Yani çözüm için iki şey tavsiye ederim:

  1. windowBackground ile özel stilini değiştirme Ben doğasında şeffaf marjı olduğunu eklemeyi
  2. Güncelleme özel arka plan görüntüsü, yukarıda açıklandığı gibi

2. Adım için, resminiz şu anda bir 9 yamaysa, Google'ın yaptığıyla aynı şeyi yapın. Eğer XML halinde görüntü oluşturduysanız, dolgu ile diğerinin içine görünür dikdörtgen gömmek için aşağıdaki örnekteki gibi bir <layer-list> kullanabilirsiniz:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="@android:color/transparent" /> 
      <padding 
       android:bottom="10dp" 
       android:left="10dp" 
       android:right="10dp" 
       android:top="10dp" /> 
     </shape> 
    </item> 
    <!-- This shape will be inset by the padding set above --> 
    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="#262626" /> 
     </shape> 
    </item> 
</layer-list> 

doldurma bu durumda içeriğe aktarmaz, bu nedenle de olacak İçerik sınırlarını görüntü ekranıyla eşleştirmek için kök düzen öğenize dolgu eklemeniz gerekir.

+0

Bu çok işe yarıyor, android tabanlı kodu bulmayı biliyorum, ancak tüm verileri içeren ve tam * .java dosyalarını gösteren bir çalışma sayfası bulmak için bunu biraz zor bulabilirsiniz. –

+0

İletişim kutusunun varsayılan dolgu değerleri çalışma zamanında alabilir miyiz? Ben sadece nerede olduğunu bulamıyorum :( –

+0

Hiyerarşi Görüntüleyici'yi kullanarak, "iletişim kutusunun varsayılan dolgularının" alertdialog'un kendisinden ve ana içeriğinden oluştuğunu öğrendim.Tüm kod değerleri tüm kodlanmış: http://goo.gl/0mfHkm http : //goo.gl/mgBsDE –

0

Sadece üst düzey ViewGroup (sizin LinearLayout) için düzen marjlarını ekleyin.

Ayrıca, birçok gereksiz yuvalanmış düzene sahiptir ve piksel birimlerini kullanarak edilmemelidir. Dialog_layout.xml dosyanız şu şekildedir:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="14dp" > 

    <TextView 
     android:id="@+id/text_title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingRight="14dp" 
     android:paddingLeft="14dp" /> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingRight="14dp" 
     android:paddingLeft="14dp"> 

     <TextView 
      android:id="@+id/text_main" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

    </ScrollView> 

    <LinearLayout 
     android:id="@+id/layout_button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="horizontal"> 
      <!-- this will be show while need to show a button --> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
     <ImageView 
      style="?icon_size.button" 
      android:visibility="gone"/> 
    </LinearLayout> 
</LinearLayout> 
İlgili konular