android Dialog 自定义 继承Dialog基类

  • Post author:
  • Post category:其他


效果图:

步骤:

1、创建对话框的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
      <!-- 标题栏 -->
      <LinearLayout
          android:id="@+id/dlg_priority_titlebar"
          android:orientation="horizontal"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true">
          <ImageView
            android:src="@drawable/star_gray"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dip"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="选择任务优先级"
            android:layout_gravity="center_vertical"/>
      </LinearLayout>
      <!-- 任务优先级 -->
      <ListView
          android:id="@+id/dlg_priority_lvw"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@id/dlg_priority_titlebar"
          android:background="@drawable/layout_home_bg">
      </ListView>     
</RelativeLayout>

2、因为该布局中使用了自定义的ListView,所以再为ListView创建布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ImageView
          android:id="@+id/list_priority_img"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="center_vertical"
          android:layout_margin="5dip"        
          />
    <TextView
         android:id="@+id/list_priority_value"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
         android:textSize="28dip"
         android:textColor="@drawable/black"/>
</LinearLayout>

3、创建自定义Dialog类PriorityDlg继承自Dialog

public class PriorityDlg extends Dialog {
    
    private Context context;
    private ListView dlg_priority_lvw = null;

    public PriorityDlg(Context context) {
        super(context);
        this.context = context;
        // TODO Auto-generated constructor stub
    }
    
    public PriorityDlg(Context context, int theme) {
        super(context, theme);
        this.context = context;
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
      //设置对话框使用的布局文件
        this.setContentView(R.layout.dlg_priority);

        dlg_priority_lvw = (ListView) findViewById(R.id.dlg_priority_lvw);

        // 设置ListView的数据源
        SimpleAdapter adapter = new SimpleAdapter(context, getPriorityList(),
                R.layout.lvw_priority, new String[] { "list_priority_img",
                        "list_priority_value" }, new int[] {
                        R.id.list_priority_img, R.id.list_priority_value });
        dlg_priority_lvw.setAdapter(adapter);

        // 为ListView设置监听器
        dlg_priority_lvw
                .setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {

                    }
                });
    }

    /**
     * 得到ListView数据源
     * 
     * @return
     */
    private List<HashMap<String, Object>> getPriorityList() {
        List<HashMap<String, Object>> priorityList = new ArrayList<HashMap<String, Object>>();
        HashMap<String, Object> map1 = new HashMap<String, Object>();
        map1.put("list_priority_img", R.drawable.priority_not_important);
        map1.put("list_priority_value", context.getResources().getString(
                R.string.dlg_priority_not_important));
        priorityList.add(map1);
        HashMap<String, Object> map2 = new HashMap<String, Object>();
        map2.put("list_priority_img", R.drawable.priority_general);
        map2.put("list_priority_value", context.getResources().getString(
                R.string.dlg_priority_general));
        priorityList.add(map2);
        HashMap<String, Object> map3 = new HashMap<String, Object>();
        map3.put("list_priority_img", R.drawable.priority_important);
        map3.put("list_priority_value", context.getResources().getString(
                R.string.dlg_priority_important));
        priorityList.add(map3);
        HashMap<String, Object> map4 = new HashMap<String, Object>();
        map4.put("list_priority_img", R.drawable.priority_very_important);
        map4.put("list_priority_value", context.getResources().getString(
                R.string.dlg_priority_very_important));
        priorityList.add(map4);

        return priorityList;
    }

}

4、创建自定义对话框

PriorityDlg dlg = new PriorityDlg(SimpleTaskActivity.this, R.style.dlg_priority);
return dlg;

这里的R.style.dlg_priority设置了对话框使用的样式文件,只是让对话框去掉标题栏,当然你也可以通过代码来完成这种效果:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 对话框样式 -->
    <style name="dlg_priority" parent="@android:Theme.Dialog">
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

到这里自定义对话框的创建就结束了,想要什么样子的对话框完全凭你自己的想像。