Android 自定义DialogFragment<二>

 

给出一个真正意义上的Demo :

新建一个风格xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DialogStyle" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/ia</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        
        <item name="android:windowFullscreen">true</item>
        <item name="android:backgroundDimEnabled">true</item>
</style>
</resources>
View Code

新建一个自定义dialog对应的xml文件 :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300.0dip"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title_text_view"
        android:layout_width="300.0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="10.0dip"
        android:layout_marginTop="20.0dip"
        android:gravity="center_horizontal"
        android:text="dialog_default_title"
        android:textSize="16.0sp" />

    <TextView
        android:id="@+id/content_text_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="20.0dip"
        android:layout_marginLeft="15.0dip"
        android:layout_marginRight="15.0dip"
        android:gravity="left"
        android:text="dialog_latest_prompt"

        android:textSize="16.0sp" />

    <View
        android:layout_width="300.0dip"
        android:layout_height="1.0dip"
        android:background="#ffdddddd" />

    <LinearLayout
        android:id="@+id/option_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/dialog_ok"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            
            android:gravity="center"
            android:paddingBottom="14.0dip"
            android:paddingTop="14.0dip"
            
            android:textSize="18.0sp" />

        <View
            android:layout_width="1.0dip"
            android:layout_height="fill_parent"
            android:background="#ffdddddd" />

        <TextView
            android:id="@+id/dialog_cancel"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            
            android:gravity="center"
            android:paddingBottom="14.0dip"
            android:paddingTop="14.0dip"
            android:text="dialog_cancel"
            
            android:textSize="18.0sp" />
    </LinearLayout>

    <TextView
        android:id="@+id/ok_text_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/ib"
        android:gravity="center"
        android:paddingBottom="14.0dip"
        android:paddingTop="14.0dip"
        android:text="dialog_ok_label"
        android:textSize="18.0sp"
        android:visibility="gone" />

</LinearLayout>
View Code

主程序xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:text="Button" />

</RelativeLayout>
View Code

自定义DialogFragment类:

package com.example.androiddialogfragmentttest;

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

@SuppressLint("NewApi")
public class MyAlertDialogFragment extends DialogFragment{

    public static interface DialogClickListener{
          public void doPositiveClick();
          public void doNegativeClick();
      }

    static DialogClickListener mListener;
    public static MyAlertDialogFragment newInstance(String title, String message,DialogClickListener listener) {
        // TODO Auto-generated method stub
        mListener=listener;
        MyAlertDialogFragment frag=new MyAlertDialogFragment();
        return frag;
    }
    
    public MyAlertDialogFragment(){
        
    }
    /*
    @Override
    
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view=inflater.inflate(R.layout.layout_dialog, container, false);
        //Dialog dia=new Dialog(getActivity(),R.style.DialogStyle);
        //TextView tv=(TextView)view.findViewById(R.id.tve);
        //tv.setText("this is customer dialog !");
        //dia.setContentView(view);
        return view;
    }
    */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        final Dialog dia=new Dialog(getActivity(),R.style.DialogStyle);
        LayoutInflater inflater = (LayoutInflater) getActivity()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.layout_dialog, null, false);

        View ok = view.findViewById(R.id.dialog_ok);
        View cancel = view.findViewById(R.id.dialog_cancel);

        ok.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dia.dismiss();
                if(mListener!=null){
                    mListener.doPositiveClick();
                }
            }
            
        });
        cancel.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dia.dismiss();
                if(mListener!=null){
                    mListener.doNegativeClick();
                }
                
            }
            
        });
        
        dia.setContentView(view);
        
        return dia;
    }

}
View Code

主程序:

package com.example.androiddialogfragmentttest;

import com.example.androiddialogfragmentttest.MyAlertDialogFragment.DialogClickListener;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.DialogFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    static DialogClickListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        TextView tv = (TextView)findViewById(R.id.text);
        tv.setText("Android123-DialogFragment Samples");


        Button button = (Button)findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                showDialog();
            }
        });
    }


    @SuppressLint("NewApi")
    void showDialog() {
        MyAlertDialogFragment newFragment = MyAlertDialogFragment.newInstance("title","information",listener);
        newFragment.show(getFragmentManager(), "Title");
    }


    public void doPositiveClick() {
         Log.i("FragmentAlertDialog", "左键按下");
    }
    
    public void doNegativeClick() {
        
    }


}

 

若干张图片,ia.png,ib.png

 

 

 

 

 

 

posted @ 2013-10-07 15:36  MMLoveMeMM  阅读(389)  评论(0编辑  收藏  举报