0

ダイアログにカスタム レイアウトを使用して、プログレス バーとテキストを表示しています。レイアウトは次のようになります。

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

このメソッドを呼び出している間、ダイアログを表示できませんが、ログは正しく印刷されています。これを解決するのを手伝ってください。

4

3 に答える 3

0

カスタム ダイアログの作成

ダイアログのカスタマイズされたデザインが必要な場合は、レイアウトとウィジェット要素を使用して、ダイアログ ウィンドウの独自のレイアウトを作成できます。レイアウトを定義したら、ルート View オブジェクトまたはレイアウト リソース 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);
于 2013-03-25T05:42:58.540 に答える
0
View dialogRoot = getLayoutInflater().inflate(R.layout.sync_bars, null);
cancelDialog.setView(dialogRoot);
ProgressBar hbar = (ProgressBar) dialogRoot.findViewById(R.id.progressBar);

プログレスバーを操作するには、プログレスバーを参照する必要があります。

于 2013-03-25T05:43:07.273 に答える
0

問題の背後にある理由が何であるかはよくわかりませんが、役立つと思われるいくつかのことを提案できます

  1. getActivity の代わりにコンテキストを使用します。

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

utilクラスに追加する必要があり、コンストラクターを介して渡す必要があるコンテキストに置き換える必要があります

 progressDialog = new Dialog(context);

getActivity メソッドを介して Activity のオブジェクトを渡していないことを願っています。

  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.
于 2013-03-25T05:44:20.210 に答える