0

アラートダイアログを再設計したいと思います(このダイアログのウィンドウを変更するため)。ネットで検索してみましたが、役に立たなかったです。アラートダイアログのレイアウトも作成しようとしましたが、これを実行するシステムが見つかりませんでした...私はAndroidの初心者です。私のコード:

import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.View.OnClickListener;

public class Magie extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.magie);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

        final Button magie1 = (Button) findViewById(R.id.bma1);
        magie1.setOnClickListener(new OnClickListener(){

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

        });

        final Button magie2 = (Button) findViewById(R.id.bma2);
        magie2.setOnClickListener(new OnClickListener(){

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

        });

        final Button magie3 = (Button) findViewById(R.id.bma3);
        magie3.setOnClickListener(new OnClickListener(){

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

        });

        final Button magie4 = (Button) findViewById(R.id.bma4);
        magie4.setOnClickListener(new OnClickListener(){


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

        });
    }

    private void magie1(){
        AlertDialog.Builder ad = new AlertDialog.Builder(this);
        ad.setTitle("title1");
        ad.setMessage("text1");
        ad.show();
    }

    private void magie2(){
        AlertDialog.Builder ad = new AlertDialog.Builder(this);
        ad.setTitle("title2");
        ad.setMessage("text2");
        ad.show();
    }

    private void magie3(){
        AlertDialog.Builder ad = new AlertDialog.Builder(this);
        ad.setTitle("title3");
        ad.setMessage("text3");
        ad.show();
    }

    private void magie4(){
        AlertDialog.Builder ad = new AlertDialog.Builder(this);
        ad.setTitle("title4");
        ad.setMessage("Text4");
        ad.show();
    }

} 
4

1 に答える 1

0

アラートのウィンドウ装飾とテーマはAndroidバージョンごとに大きく異なり、特定のバージョンのOEM変更によって頻繁にカスタマイズされます。アクティビティでAndroidAlertDialogシステムリソースとテーマをリサイクルする安全な方法はありません。一部の必要なリソースは非表示になっています。AlertDialogsの大部分は、レイアウトファイルではなくコードで構築されています。奇妙ですが本当です。

これにより、2つの選択肢のうちの1つが残ります。

(1)AlertDialog.Builder.setView()を使用して、カスタムレイアウトをアラートダイアログに挿入します。

間違いなく好ましいアプローチ。このアプローチには、テーマに関する小さな問題があります。背景が白または黒であると想定しないこと、およびコントロールのデフォルトの色を上書きしないことが賢明です。(たとえば、Samsung Galaxy Tab 1.0は、明るいテーマを使用している場合でもすべてのアラートを青い背景に表示し、明るいテーマを使用している場合は青い背景に判読できない黒いテキストを表示します)。ビューで明示的な色を使用する必要がある場合(またはライトテーマを使用する必要がある場合)は、ビューの背景が無地であることを確認してください(ライトテーマの場合は白、デフォルトテーマの場合は黒)。

可能であれば、AlertDialog.Builderメソッドを使用してダイアログボタンを追加します。また、アラートダイアログにタイトルバーが必要な場合は、AlertDialog.Builder.setIconおよびAlertDialog.Builder.setTitleを呼び出すことを忘れないでください。

(2)選択したAndroidバージョンのアラートを模倣するアクティビティを作成します。

これを行う場合、実行時にAndroidシステムリソースを使用することは実際には不可能です。ただし、必要に応じて、AndroidSDKからリソースを盗むことができます。androidのすべてのバージョンのストックリソースファイルは、SDKの「platforms」ディレクトリにあります。一般的な考え方は、すべての装飾を削除するアクティビティのスタイルを設定してから、レイアウトファイルでウィンドウの装飾をエミュレートすることです。

styles.xml:

<style name="Theme.TutorialDialog" parent="android:style/Theme.Black">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
</style>

AndroidManifest.xml:
     <activity
          android:name="com.twoplay.twoplayer2.TutorialActivity"
          ...
      android:theme="@style/TutorialDialog" 
     />

これにより、そのすぐ下のアクティビティの上に浮かぶ透明なアクティビティが生成されます。次に、タイトルバーとボタンを再作成するのはあなた次第です。レイアウトでパディングまたはマージンを使用して、コンテンツの周囲に透明な境界線を配置します。sdkプラットフォームディレクトリからできるリソースを探します。いいえ、アラートダイアログが使用するボタンスタイルを再作成する既成の方法もありません。これは難しい方法であり、最後の手段としてのみ使用する必要があります。

時々役立つパターン:アラートダイアログをラップするアクティビティを作成します。上記のカスタムテーマを使用して、ウィンドウの装飾を削除します。Activity.onCreateでは、ビューを設定しません。空のままにしておきます。次に、onCreate内で、アラートを作成して表示します。次に、アラートのボタンハンドラーは、囲んでいるアクティビティでActivity.finish()を呼び出します。これは、アラートダイアログを複数のアクティビティ間でクリーンにリサイクルする場合に役立ちます。または、バックグラウンドからのシステムアクティビティに応答してアラートダイアログを起動する必要がある場合、または通知バーボタンが押された場合、&c。

お役に立てば幸いです。簡単な答え:人間的に可能な場合は、AlertDialog.Builder.setViewを使用してください。

于 2013-02-16T19:28:24.543 に答える