0

カスタムダイアログを機能させようとしています。タイトル、基本的なTextMessage、および通常はボタンが表示されるカスタムレイアウトは含まれていません。AlertDialog.Builderを使用してこれを達成しようとしましたが、Dialogを拡張し、Dialogでメソッドを呼び出しても、期待した結果が得られませんでした。

これはレイアウトです。カスタムButtonArea(layout / dialog_footer)として使用するのが好きです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <CheckBox
        android:id="@+id/dialog_checkbox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/never_show_again"
        android:textColor="@color/black"
        android:visibility="gone"
        android:background="@color/dialog_button_background"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/dialog_checkbox"
        android:layout_alignWithParentIfMissing="true"
        android:orientation="horizontal"
        android:background="@color/dialog_button_background"
        android:paddingBottom="-10dip">

        <Button
            android:id="@+id/dialog_btn_positive"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight=".5"
            android:text="@string/ok"
            android:gravity="center"
            android:visibility="gone"
            />

        <Button
            android:id="@+id/dialog_btn_negative"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight=".5"
            android:text="@string/btn_cancel" 
            android:visibility="gone" />
    </LinearLayout>

</RelativeLayout>

最も簡単な試みは次のようになります。

AlertDialog.Buiilder builder = new AlertDialog.Builder(context);
builder.setMessage("my Message");
Dialog dialog = builder.create();

//builder has `setView for Message or setCustomTitle, but no setCustomFooter
LayoutInflater inflater = LayoutInflater.from(context);
View footer = inflater.inflate(R.layout.dialog_footer);

//either NullPointer Exception
dialog.addContentView(footer, footer.getLayoutParams);
//or AndroidRuntimeException (requestFeature() must be called befoire adding content)
dialog.addContentView(footer, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

レイアウトの上部にTextViewを配置して「MessageArea」をエミュレートしようとすると、機能しますが、下部に非常に醜い黒い境界線があります(カスタムのDialog-Themeだと思います)。

システムダイアログの「ルックアンドフィール」を維持しながら、ボタンを自分のビューに置き換えて、自分で何かを処理するための最良の方法は何ですか?

4

2 に答える 2

0

こんにちは友人この投稿をチェックしてくださいそれはあなたの問題に役立つかもしれません

Android-カスタムAlertDialog背景色

ここで、アプリ用に独自のカスタム編集ダイアログを作成しました。レイアウトコードを参照してください。

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

<TableRow>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Name: "
        android:textColor="#fff" />

    <EditText
        android:id="@+id/txtDelName"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp" />
</TableRow>

<TableRow>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Contact No :"
        android:textColor="#fff" />

    <EditText
        android:id="@+id/txtDelAge"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:ems="10" >

        <requestFocus />
    </EditText>
</TableRow>

<TableRow android:layout_height="wrap_content" >

    <Spinner
        android:id="@+id/spinDiagDept"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_marginLeft="5dp"
        android:layout_span="2"
        android:prompt="@string/Rel_prompt"
        android:visibility="visible" />
</TableRow>

</TableLayout>

そしてここにアラートダイアログコードがあります

    public class Alerts {

    public static AlertDialog ShowEditDialog(final Context con,final Emergencydb emp)
    {
AlertDialog.Builder b=new AlertDialog.Builder(con);
b.setTitle("Emergency Contact Details");
LayoutInflater li=LayoutInflater.from(con);
View v=li.inflate(R.layout.editdialog, null);

b.setIcon(android.R.drawable.ic_input_get);

b.setView(v);
final TextView txtName=(TextView)v.findViewById(R.id.txtDelName);
final TextView txtAge=(TextView)v.findViewById(R.id.txtDelAge);
final Spinner spin=(Spinner)v.findViewById(R.id.spinDiagDept);
Utilities.ManageDeptSpinner(con, spin);
for(int i=0;i<spin.getCount();i++)
{
    long id=spin.getItemIdAtPosition(i);
    if(id==emp.getDept())
    {
        spin.setSelection(i, true);
        break;
    }
}


txtName.setText(emp.getName());
txtAge.setText(String.valueOf(emp.getAge()));

b.setPositiveButton("Modify", new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        emp.setName(txtName.getText().toString());
        emp.setAge(String.valueOf(txtAge.getText().toString()));                                    emp.setDept((int)spin.getItemIdAtPosition(spin.getSelectedItemPosition()));

        try
        {
        @SuppressWarnings("rawtypes")
        DatabaseHelper db=new DatabaseHelper(con);
        db.UpdateEmp(emp);
        Toast.makeText(getBaseContext(), "Modified Successfully",                       Toast.LENGTH_SHORT).show();
        }
        catch(Exception ex)
        {

        }
    }       
});

b.setNeutralButton("Delete", new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
        @SuppressWarnings("rawtypes")
        DatabaseHelper db=new DatabaseHelper(con);
        db.DeleteEmp(emp);

    }
});
b.setNegativeButton("Cancel", null);

return b.create();
//diag.show();

     }

    protected static Context getBaseContext() {
// TODO Auto-generated method stub
return null;
      }

        public static void ShowEmpAddedAlert(
    android.view.View.OnClickListener onClickListener) {
// TODO Auto-generated method stub

  }



}
于 2013-02-27T10:48:03.490 に答える
0

Aleks GI の助けを借りて、なんとか機能させることができました。

コード フローは次のようになります。

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("MyMessage");

LayoutInflater inflater = LayoutInflater.from(context);
View footerView = inflater.inflate(R.layout.apo_plus_dialog_footer, null);

AlertDialog alertDialog = builder.create();
alertDialog.setView(footerView, 0,0,0,0);

if (!hasTitle){
    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
}

alertDialog.show();

誰かが私と同じようなダイアログの動作をしたい場合に備えて。

于 2013-02-27T15:46:57.260 に答える