2013-01-14 77 views
0

今天的問題是,在Android 2.3.5顯示自定義對話框是錯誤的。對話框寬度比應該寬。AlertDialog比預期的更寬

enter image description here

我試着在TextView使用20dp代替wrap_contentLinearLayout沒有成功。我想要得到與wrap_content一樣的矩形形狀,因爲它在Android 4中。

這是自定義對話框視圖的xml代碼。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Please wait" > 
    </TextView> 
</LinearLayout> 

這是一個自定義對話框的代碼,其他都不重要。

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     AlertDialog dialog; 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.dialog_progressdialog, 
             null); 

     builder.setView(layout); 

     //initializing textview 

     dialog = builder.create(); 

     //do other stuff 

在android 4.0.3上,我得到矩形,所以它看起來不錯 - 它是我想要的。可能是什麼問題,有沒有人發現這種問題?對不起,我沒有樣品Android 4 - 今天沒有電話做樣品。


如果我把裏面的還progressbar我能夠在安卓4.0創建方,但不可能做到這一點的是Android 2.3。

的Android 2.3.5

enter image description here

的Android 4.0.4

enter image description here

回答

0

我不知道什麼是你的代碼錯誤。我想讓ProgressDialog在屏幕的中心。我已經實現了它的Android 2.2。*,它在所有設備,即使在Android 4完美。*

我另外我有使用風格的自定義progressDialog。請參閱下面的代碼,您將會了解它。

Java代碼:

final Dialog dialog = new Dialog(SplashActivity.this,R.style.CustomDialogTheme); 
     dialog.getWindow(); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.internet_dialog); 
     dialog.setCancelable(false); 

     Button retryBtn = (Button) dialog.findViewById(R.id.retryBtn); 
     Button cancel = (Button) dialog.findViewById(R.id.cancelBtn); 

     retryBtn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       dialog.dismiss(); 
            // Some task 
      } 
     }); 

     cancel.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       dialog.dismiss(); 
            // Some task 
      } 
     }); 
     dialog.show(); 
    } 

CustomDialogTheme

<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
    <item name="android:fitsSystemWindows">true</item> 

    <!-- <item name="android:colorBackgroundCacheHint">#00000000</item> 
    <item name="android:background">#00000000</item> --> 

</style> 

而我佈局的XML文件:internet_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#00000000" 
    android:orientation="vertical" > 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/popup_shape" 
     android:layout_margin="10dp" 
     android:orientation="vertical" 
     > 

     <TextView 
      android:id="@+id/net_popup_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:text="@string/internet_popup_heading" 
      android:layout_marginTop="15dp" 
      android:textColor="#ffffff" 
      android:textSize="20dp" /> 

     <TextView 
      android:id="@+id/net_msg" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_margin="20dp" 
      android:gravity="center" 
      android:text="@string/internet_popup_msg" 
      android:textColor="#ffffff" 
      android:textSize="14dp" /> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:orientation="horizontal" 
      android:gravity="center" 
      android:layout_gravity="center_horizontal" 
      android:padding="5dp" > 

      <Button 
       android:id="@+id/retryBtn" 
       android:layout_width="0dp" 
       android:layout_weight="1" 
       android:layout_height="wrap_content" 
       android:layout_marginRight="2dp" 
       android:background="@drawable/blue_button" 
       android:textColor="#000000" 
       android:textStyle="bold" 
       android:text="@string/internet_popup_retry" /> 

      <Button 
       android:id="@+id/cancelBtn" 
       android:layout_width="0dp" 
       android:layout_weight="1" 
       android:layout_marginLeft="2dp" 
       android:layout_height="wrap_content" 
       android:background="@drawable/blue_button" 
       android:textColor="#000000" 
       android:textStyle="bold" 
       android:text="@string/internet_popup_exit" /> 
     </LinearLayout> 
    </LinearLayout> 

</LinearLayout> 

在這裏,我還沒有給螞蟻固定高度/寬度,但在任何設備的所有佈局中似乎都很完美。

嘗試在對話框中添加樣式並查看結果。 希望它能幫助你。

歡迎發表評論。享受編碼... :)

0

只是爲了確保您的代碼行爲在所有的平臺上一樣,你可以添加布局PARAMS到您的對話框如下:

layout.setLayoutparams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

dialog.setView(layout);

確定其周圍的工作,但如果你的想法,因爲我對這個問題,你可以嘗試:

文本視圖的

calulate長度使用Paint.measureText();和設置以對話視圖參數。 layout.setLayoutparams(new LinearLayout.LayoutParams(LENGTH_CALCULATED, LayoutParams.WRAP_CONTENT));

+0

似乎不起作用 – deadfish

+0

不工作意味着任何錯誤或相同的結果? – akkilis

+0

我得到了相同的結果 – deadfish

0

試試這個

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(layout); 
builder.setTitle("Title"); 
alertDialog = builder.create(); 
alertDialog.show(); 
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height. 

也可以嘗試這個

alertDialog.show(); 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 

lp.copyFrom(alertDialog.getWindow().getAttributes()); 
lp.width = 150; 
lp.height = 500; 
lp.x=-170; 
lp.y=100; 
alertDialog.getWindow().setAttributes(lp); 
+0

setLayout的作品,但不是它應該的,設置100x100給我矩形.. – deadfish

+0

你想要什麼?嘗試其他解決方案 –

+0

是的,但如果我將兩個textview元素放在垂直方向 - 第二個是切割。對話框尺寸不顯示此元素。對話框高度非常小,textview不是以重心爲中心 - 就像它忽略了其他參數 – deadfish