30

この質問は以前に尋ねられました: AlertDialog カスタム タイトルには黒い境界線があります

しかし、満足のいく回答が得られず、一部の情報が欠落しています。


タイトルがなく、下部にボタンがないカスタム ダイアログを Android で作成しようとしています。

ただし、結果のダイアログには、ビューの上部と下部に沿って黒い「境界線」/「間隔」/何かがあります。

ドキュメントから:

基本 Dialog クラスで作成されたダイアログには、タイトルが必要です。setTitle() を呼び出さない場合、タイトルに使用されるスペースは空のままですが、表示されたままになります。タイトルがまったく必要ない場合は、AlertDialog クラスを使用してカスタム ダイアログを作成する必要があります。ただし、AlertDialog は AlertDialog.Builder クラスで最も簡単に作成できるため、上記で使用した setContentView(int) メソッドにはアクセスできません。代わりに、setView(View) を使用する必要があります。このメソッドは View オブジェクトを受け入れるため、XML からレイアウトのルート View オブジェクトをインフレートする必要があります。

だから、それは私がしたことです:

ようこそ.java

public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        builder.create().show();
    }
}

ようこそダイアログ.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@drawable/texturebg"
              android:id="@+id/layout_root"
              android:orientation="vertical"
              android:padding="40px">
    ...
</LinearLayout>

注:どこかで見つけた提案に従ってではなくFrameLayout、ルートとして使用しようとしましたが、それは役に立ちませんでした。ViewGroupLinearLayout

結果

ここに画像の説明を入力 ここに画像の説明を入力


setBackgroundDrawable 提案

public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        AlertDialog dialog = builder.create();

        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

        dialog.show();
    }
}

私にはうまくいきませんでした。

4

5 に答える 5

39

AlertDialog クラスのソースを見ると、ほとんどのメソッドが単にプロキシ メソッド (ファサード) の周りにあることがわかりますprivate AlertController mAlert

AlertController クラス ソースを見ると、4 つの興味深いメンバー変数が表示されます。

private int mViewSpacingLeft;
private int mViewSpacingTop;
private int mViewSpacingRight;
private int mViewSpacingBottom;
private boolean mViewSpacingSpecified = false;

に設定mViewSpacingSpecifiedするtrueと、ダイアログの上下の境界線が削除されます。

これは、次の行を変更することで適切に行われます。

dialog.setView(layout);

に:

dialog.setView(layout, 0, 0, 0, 0);
于 2012-05-11T18:38:16.780 に答える
8
dialog.setInverseBackgroundForced(true);

コードで上記を使用して、アラート ダイアログの境界線を削除します。

InverseBackgroundForced については、このLINKを参照してください。

更新このコードを試してください::::

public class Welcome  extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.welcome);

        AlertDialog.Builder builder = new AlertDialog.Builder(Welcome.this);
        LayoutInflater _inflater = LayoutInflater.from(Welcome.this);
        View view = _inflater.inflate(R.layout.welcomedialog,null);
        builder.setView(view);

        AlertDialog alert = builder.create();
        alert.show();
    }
}

注::また、welcomedialog.xml から android:padding="40px" を削除してみてください。

于 2012-05-03T15:07:12.280 に答える
0
setBackgroundDrawable(new ColorDrawable(0));

ダイアログでこれを呼び出します。

于 2012-05-03T14:48:09.797 に答える