在Android系统中,通常我们打开打开一个对话框,都是在进入应用后,点击某一个按钮或者列表项进入Dialog对话框的,现在我们来写一个直接从点击应用后进入Dialog对话框。
设计思路跟我们点击一个按钮来打开对话框类似,只不过在其中我们屏蔽掉这一段的交互代码。点击应用后,创建Activity,执行onCreate()方法,然后在onCreate()方面内直接创建Dialog对话框就可以了。
需要注意的是,虽然这样设计之后可以达到需求,但是它后台毕竟还是有我们创建的Activity,所以我们必须屏蔽掉这个Activity所带来的一些页面上的痕迹,比如 Activity 的 label属性等。
1. 创建一个Activity,如下
2. 由于main布局文件被屏蔽了,所以就不贴出来了。package com.car.settings; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnKeyListener; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.SimpleAdapter; public class CarSettingsActivity extends Activity{ /** Called when the activity is first created. */ final int LIST_DIALOG = 0x113; // define the Setting menu name. private String[] names = new String[] { "Setting_item_1", "Setting_item_2", "Setting_item_3" }; // define the Setting menu icon private int[] imageIds = new int[] { R.drawable.ic_settings, R.drawable.ic_settings, R.drawable.ic_settings }; //直接点击主菜单应用,进入Dialog @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); showDialog(LIST_DIALOG); //屏蔽掉button按钮 /* setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });*/ } @Override protected Dialog onCreateDialog(int id, Bundle args) { switch (id) { case LIST_DIALOG: Builder b = new AlertDialog.Builder(this); b.setIcon(R.drawable.ic_launcher); b.setTitle("设备设置"); List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < names.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("icon", imageIds[i]); listItem.put("name", names[i]); listItems.add(listItem); } SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.settings_dialog, new String[] { "name", "icon" }, new int[] { R.id.name, R.id.icon}); b.setAdapter(simpleAdapter, new DialogInterface.OnClickListener() { //注意这边finish()掉的原因是前面 屏蔽掉了Activity后,在关闭Dialog后依然有它的痕迹,为了页面效果良好,直接 finish 掉 @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); b.setOnKeyListener(new OnKeyListener() { //处理 Android 4.0 Dialog关闭掉后,点击返回键,Activity痕迹依然存在. @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode == KeyEvent.KEYCODE_BACK){ finish(); return true; } return false; } }); return b.create(); } return null; } }自定义一个Dialog的对话框:settings_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <!-- icon for settings menu --> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="20dp"/> <!-- name for settings menu --> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16dp" android:gravity="center_vertical" android:paddingLeft="10dp" /> </LinearLayout>3. 修改 AndroidManifest.xml文件,注意 android:theme="@android:style/Theme.Dialog"这个是关键。
4. 编译执行结果截图如下。<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.car.settings" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".CarSettingsActivity" android:theme="@android:style/Theme.Dialog"> <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
本文介绍如何在Android应用启动时直接展示Dialog对话框,而非传统的点击按钮或列表项触发。通过创建特殊Activity并在onCreate()方法内创建Dialog,同时处理Activity的label属性以消除页面痕迹。关键在于AndroidManifest.xml中设置android:theme为"Theme.Dialog"。


1591

被折叠的 条评论
为什么被折叠?



