Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何重新设计AlertDialog_Android_Eclipse_Android Widget - Fatal编程技术网

Android 如何重新设计AlertDialog

Android 如何重新设计AlertDialog,android,eclipse,android-widget,Android,Eclipse,Android Widget,我想重新设计我的警报对话框(以更改此对话框的窗口)。我试图在网上搜索,但没有找到有用的东西。我还试图为警报对话框设置布局,但我没有找到可以这样做的系统。。。我是Android的初学者。我的代码: import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import

我想重新设计我的警报对话框(以更改此对话框的窗口)。我试图在网上搜索,但没有找到有用的东西。我还试图为警报对话框设置布局,但我没有找到可以这样做的系统。。。我是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();
    }

} 

不同的Android版本,警报的窗口装饰和主题有很大的不同,并且经常通过OEM对给定版本的修改进行定制。在活动中回收android AlertDialog系统资源和主题没有安全的方法。部分所需资源被隐藏;AlertDialogs的大部分是用代码而不是布局文件构建的。奇怪但真实

这让您有两个选择之一

(1) 使用AlertDialog.Builder.setView()将自定义布局插入警报对话框

绝对是首选的方法。这种方法存在一些小的主题问题。明智的做法是不要假设背景是白色或黑色,明智的做法是不要覆盖任何控件上的默认颜色。(例如,三星Galaxy Tab 1.0,即使使用浅色主题,也会在蓝色背景上显示所有警报,使用浅色主题时会在蓝色背景上显示无法阅读的黑色文本)。如果必须在视图中使用显式颜色(或使用灯光主题),请确保视图具有坚实的背景(白色表示灯光主题,黑色表示默认主题)

如果可以,请使用AlertDialog.Builder方法添加对话框按钮。如果您希望在警报对话框上显示标题栏,请不要忘记调用AlertDialog.Builder.setIcon和AlertDialog.Builder.setTitle

(2) 为您选择的Android版本构建一个模拟警报的活动

执行此操作时,在运行时不可能使用Android系统资源。但是,如果需要,您可以从Android SDK窃取资源。所有android版本的股票资源文件都可以在SDK的“平台”目录中找到。一般的想法是,您可以为删除所有装饰的活动设置样式,然后在布局文件中模拟窗口装饰

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" 
     />
styles.xml:
真的
@空的
真的
AndroidManifest.xml:
这将生成一个透明的活动,该活动漂浮在紧靠其下方的活动之上。然后由您重新创建标题栏和按钮。在布局中使用填充或边距在内容周围放置透明边框。可以从sdk平台目录中清除哪些资源。不,也没有现成的方法来重新创建警报对话框使用的按钮样式。这是一条艰难的道路,只能作为最后的手段

有时有用的模式:创建一个包装警报对话框的活动。使用上面给出的自定义主题删除窗口装饰。在Activity.onCreate中,不设置视图;就让它空着吧。然后在onCreate中创建并显示警报。然后,警报的按钮处理程序调用封闭活动的Activity.finish()。如果您希望在多个活动中干净地循环使用警报对话框,这将非常有用;或者,如果需要启动警报对话框以响应后台的系统活动,或者需要按下通知栏按钮,&c

希望有帮助。简短的回答是:尽可能使用AlertDialog.Builder.setView