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