2013-03-25 73 views
0

我使用自定義佈局爲我的對話框,顯示進度條和text.The佈局看起來像無法顯示自定義對話框與進度

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/footer_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/popuplayout" 
    android:padding="8dp"> 

    <LinearLayout android:id="@+id/progressdialog" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true"> 

    <ProgressBar 
     android:id="@+id/progressBar" 
     android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:layout_gravity="center_vertical" 
     android:layout_toLeftOf="@+id/textView1" /> 

    <TextView 
     android:id="@+id/progressmsg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="10dp" 
     android:textStyle="bold" 
     android:textSize="15dp" 
     android:padding="5dp" 
     android:text="loading..." /> 
    </LinearLayout> 
</RelativeLayout> 

,並通過我的util.java的方法分配此佈局對話框(不活動)像

private static Dialog progressDialog = null; 
public static void showLoadingProgress(String msg){ 
     Log.d("EditorUtil", "show loading progress"+progressDialog);//No i18n 

     progressDialog = new Dialog(MainActivity.getActivity()); 
     progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     progressDialog.setCancelable(false); 
     progressDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
     progressDialog.setContentView(R.layout.customprogress); 

     TextView message = (TextView)progressDialog.findViewById(R.id.progressmsg); 
     message.setText(msg); 

     progressDialog.show(); 
     Log.d("",progressDialog.isShowing()+""); //No i18n 
    } 

雖然調用這個方法,我無法看到對話框,但日誌能正常打印。請幫忙解決這個問題。

回答

0

創建自定義對話框

如果你想爲一個對話框,以定製的設計,您可以用佈局和widget元素的對話窗口中創建自己的佈局。在定義佈局之後,將根視圖對象或佈局資源ID傳遞給setContentView(View)。

For example, to create the dialog shown to the right: 

Create an XML layout saved as custom_dialog.xml: 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/layout_root" 
       android:orientation="horizontal" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:padding="10dp" 
       > 
    <ImageView android:id="@+id/image" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_marginRight="10dp" 
       /> 
    <TextView android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:textColor="#FFF" 
       /> 
</LinearLayout> 

該XML定義了LinearLayout中的ImageView和TextView。將上述佈局對話框的內容視圖和定義內容的ImageView的和TextView的元素:

Context mContext = getApplicationContext(); 
Dialog dialog = new Dialog(mContext); 

dialog.setContentView(R.layout.custom_dialog); 
dialog.setTitle("Custom Dialog"); 

TextView text = (TextView) dialog.findViewById(R.id.text); 
text.setText("Hello, this is a custom dialog!"); 
ImageView image = (ImageView) dialog.findViewById(R.id.image); 
image.setImageResource(R.drawable.android); 
+0

我也做了對話相同。請參閱我的代碼。 – vignesh 2013-03-25 15:43:14

0
View dialogRoot = getLayoutInflater().inflate(R.layout.sync_bars, null); 
cancelDialog.setView(dialogRoot); 
ProgressBar hbar = (ProgressBar) dialogRoot.findViewById(R.id.progressBar); 

你必須參考你的進度條來與它進行交互。

0

我真的不知道什麼可能是你背後的問題的原因,但我可以建議一些東西,你可能會發現有用的

  1. 使用上下文,而不是getActivity。

    progressDialog = new Dialog(MainActivity.getActivity());

應與上下文來代替,你必須添加到您的Util類,應該通過構造

progressDialog = new Dialog(context); 

我希望你不及格活動對象通過getActivity方法進行傳遞。

  1. 除了使用progressDialog.getWindow()clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)的。和 progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

可以所有這些東西添加到R.style.Your主題

3,如果創建一個單獨的類擴展對話框類這樣

public class TextEditDialog extends Dialog implements OnClickListener { 
      Button cancelButton; 
      public Button okBtn; 
      TextView title; 
      EditText nameField,password; 
      public static long id; 
      public static int code; 
      CheckBox rememberme; 
      Context c; 
      TableRow bottomoftextdialog; 
      TextView bottomtexttochange,toptexttochange; 

      public TextEditDialog(Context context) { 
       super(context,R.style.Theme_Custom); 
       c=context; 
       this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

       setContentView(R.layout.main); 

       nameField = (EditText) findViewById(R.id.Uname); 
       password= (EditText) findViewById(R.id.password); 
       rememberme=(CheckBox)findViewById(R.id.rememberme); 
       okBtn = (Button)findViewById(R.id.login); 
       bottomoftextdialog=(TableRow)findViewById(R.id.bottomoftextdialog); 

       bottomtexttochange=(TextView)findViewById(R.id.bottomtexttochange); 
       toptexttochange=(TextView)findViewById(R.id.toptexttochange); 
       okBtn.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 

         dismiss(); 
        } 
       }); 

      } 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     } 

    this way you will be able to manage things really well.