• android 自定义dialog 易扩展


    最近心情不太好,原因是被一女女抛弃了,作为一名程序屌丝,我深感无助,从来没有任何的要求

    啰嗦了几句,众屌原谅。

    先上效果图:

    大概就是这个屌样,

    重写了Dialog,主要就是头尾部,可自定义,容易扩展,可设置动画。

    上代码(声明:代码没有经过最优化处理,众屌可以自己做处理)

    layout文件,(心情不好,懒得整合)

    文件名:dialog_c.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/WHITE"
        android:orientation="vertical"
        tools:context=".MainActivity" >
        
        <TextView
            android:id="@+id/dialog_title_textView1"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:background="@color/DIALOG_HEADER_BG_COLOR"
            android:gravity="center"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@color/BLACK" />
    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:background="@color/DIALOG_DIVIDER_COLOR" />
    
        <LinearLayout
            android:id="@+id/main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:orientation="vertical" >
    
        </LinearLayout>
            
        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:background="@color/DIALOG_DIVIDER_COLOR" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/dialog_button_confirm"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="@drawable/dialog_button_selector"
                android:text="@string/dialog_confirm"
                android:textColor="@color/BLACK" />
    
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="1px"
                android:layout_height="match_parent"
                android:layout_marginBottom="5dp"
                android:layout_marginTop="5dp"
                android:background="@color/DIALOG_DIVIDER_COLOR" />
    
            <Button
                android:id="@+id/dialog_button_cancel"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="@drawable/dialog_button_selector"
                android:text="@string/dialog_cancel" />
        </LinearLayout>
    
    </LinearLayout>

    Java文件:CDialog.java(我都忘了为毛会起这么挫的名字)

    包名什么的自己改就行了。

    ScreenConfig 类是屏幕宽高,

    package com.chishacai.widgets;
    
    import android.app.Activity;
    import android.app.Dialog;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.chishacai.personalcenter.R;
    import com.chishacai.personalcenter.config.ScreenConfig;
    
    public class CDialog extends Dialog {
        private Activity act;
        private Window window;
        
        private LinearLayout main;
        
        private TextView title;
        private Button confirm;
        private Button cancel;
        
        private CInterface cInterface;
        
        private CDialog instance;
        
        public CDialog(Activity act) {
            super(act, R.style.GeneralDialog);
            
            this.act = act;
            
            setContentView(R.layout.dialog_c);
            
            window = getWindow(); // 得到对话框
            settingDialog(window);
            
            initWidgets();
            
            instance = this;
        }
        
        private void initWidgets() {
            title = (TextView) window.findViewById(R.id.dialog_title_textView1);
            confirm = (Button) window.findViewById(R.id.dialog_button_confirm);
            confirm.setTag(0);
            confirm.setOnClickListener(click);
            cancel = (Button) window.findViewById(R.id.dialog_button_cancel);
            cancel.setTag(1);
            cancel.setOnClickListener(click);
            
            main = (LinearLayout) window.findViewById(R.id.main);
        }
        
        private View.OnClickListener click = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int tag = Integer.valueOf(v.getTag().toString());
                switch (tag) {
                case 0:
                    if (cInterface != null) {
                        cInterface.confirm();
                    }
                    instance.dismiss();
                    break;
                case 1:
                    if (cInterface != null) {
                        cInterface.cancel();
                    }
                    instance.dismiss();
                    break;
                }
            }
        };
        
        /**
         * set title
         * 
         * @author ddJuly
         * @date 2013-11-1 下午3:19:35
         * @param text
         */
        public void setTitle(String text) {
            title.setText(text);
        }
        
        /**
         * set title
         * 
         * @author ddJuly
         * @date 2013-11-1 下午3:19:44
         * @param text
         */
        public void setTitle(int text) {
            title.setText(text);
        }
        
        /**
         * set content view
         * 
         * @author ddJuly
         * @date 2013-11-1 下午3:19:49
         * @param view
         */
        public void setView(View view) {
            main.addView(view);
        }
    
        /**
         * set interface
         * 
         * @author ddJuly
         * @date 2013-11-1 下午3:19:57
         * @param cInterface
         */
        public void setCInterface(CInterface cInterface) {
            this.cInterface = cInterface;
        }
        
        
        public interface CInterface {
            void confirm();
            void cancel();
        }
        
        
        public static void settingDialog(Window window) {
            WindowManager.LayoutParams wl = window.getAttributes();
            // 根据x,y坐标设置窗口需要显示的位置
            wl.x = 0; // x小于0左移,大于0右移
            wl.y = 0; // y小于0上移,大于0下移
            wl.width = ScreenConfig.screenWidth - 100;
            // wl.alpha = 0.6f; //设置透明度
            // wl.gravity = Gravity.BOTTOM; //设置重力
            window.setAttributes(wl);
            window.setWindowAnimations(R.style.popwin_anim_style); // 设置窗口弹出动画
        }
        
    }
    public class ScreenConfig {
        public static int screenWidth;
        public static int screenHeigh;
    }

    values文件夹下的color.xml(我都忘了用了那些颜色了)

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="BG_COLOR">#FFFFFF</color>
        <color name="WHITE">#FFFFFF</color>
        <color name="BLACK">#000000</color>
        <color name="GRAY">#CCCCCC</color>
        <color name="MAIN_GREEN">#409d23</color>
        
        <color name="GENERAL_ITEM_STROKE_COLOR">#999999</color>
        <color name="GENERAL_ITEM_STROKE_DOWN_COLOR">#D0F5C1</color>
        
        <color name="TITLE_BAR_BG">#409d23</color>
        <color name="LOGIN_BUTTON_COLOR">#4aac2c</color>
        <color name="LOGIN_FINDPASS_COLOR">#66c7ff</color>
        <color name="LOGIN_REGISTER_COLOR">#e8b61e</color>
        
        <color name="EDITINFO_GRAY_COLOR">#CCCCCC</color>
        <color name="EDITINFO_LEFT_TEXT_COLOR">#e8b61e</color>
        <color name="EDITINFO_RIGHT_TEXT_COLOR">#66c7ff</color>
        
        <color name="DIALOG_DIVIDER_COLOR">#CCCCCC</color>
        <color name="DIALOG_HEADER_BG_COLOR">#e7e6e6</color>
        <color name="DIALOG_BUTTON_KEYDOWN_COLOR">#CCCCCC</color>
        
        
        <color name="SETTING_EXIT_BUTTON1">#CC0000</color>
        <color name="SETTING_EXIT_BUTTON2">#990000</color>
        
        <color name="GENERAL_GREEN_BUTTON_UP">#409d23</color>
        <color name="GENERAL_GREEN_BUTTON_DOWN">#32781B</color>
        <color name="GENERAL_BLUE_BUTTON_UP">#66c7ff</color>
        <color name="GENERAL_BLUE_BUTTON_DOWN">#29B3FD</color>
        <color name="GENERAL_YELLOW_BUTTON_UP">#e8b61e</color>
        <color name="GENERAL_YELLOW_BUTTON_DOWN">#D4A416</color>
    
    </resources>

    values下的style.xml添加

         <style name="GeneralDialog" parent="@android:Theme.Dialog">
            <item name="android:windowFrame">@null</item>
            <item name="android:windowNoTitle">true</item> 
            <item name="android:windowBackground">@android:color/white</item>
            <item name="android:windowIsFloating">true</item>
            <item name="android:windowContentOverlay">@null</item>
        </style>
        
         
        <style name="popwin_anim_style">
             <item name="android:windowEnterAnimation">@anim/menushow</item>
             <item name="android:windowExitAnimation">@anim/menuhide</item>
        </style>

    anim文件夹下:

    文件:menushow.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator"
        >  
        <translate 
            android:fromXDelta="0"  
            android:toXDelta="0"  
            android:fromYDelta="-500"  
            android:toYDelta="0"  
            android:duration="500" /> 
            
        <alpha 
            android:fromAlpha="0.1"
            android:toAlpha="1.0"
            android:duration="500"/>
                
    </set>

    文件:menuhide.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">  
        <translate  
            android:fromXDelta="0"  
            android:toXDelta="0"  
            android:fromYDelta="0"  
            android:toYDelta="-500"  
            android:duration="500" />  
            
        <alpha 
            android:fromAlpha="1.0"
            android:toAlpha="0.1"
            android:duration="500"/>
    </set>

    使用方法:(基本跟那个AlertDialog一样)

            // create nickname dialog
            nameDialog = new CDialog(this);
            View nnView = inflater.inflate(R.layout.dialog_nickname_c, null);
            final TextView nameText = (TextView) nnView.findViewById(R.id.editText1);
            nameText.setText(nickname);
            nameDialog.setView(nnView);
            nameDialog.setTitle(R.string.editinfo_nickname);
            nameDialog.setCInterface(new CDialog.CInterface() {
                @Override
                public void confirm() {
                    nickname = nameText.getText().toString();
                    nicknameView.setText(nickname);
                }
                @Override
                public void cancel() {
                }
            });

    如有改进或错误之处,不怜赐教。

  • 相关阅读:
    jmeter怎么衡量tps的值
    QPS、TPS、并发用户数、吞吐量关系
    PPAPI插件开发指南
    WebRTC手记之WebRtcVideoEngine2模块
    WebRTC手记Channel概念
    WebRTC手记之本地音频采集
    WebRTC手记之本地视频采集
    WebRTC手记之框架与接口
    WebRTC手记之初探
    Chromium的GPU进程启动流程
  • 原文地址:https://www.cnblogs.com/jinglingJuly/p/3402399.html
Copyright © 2020-2023  润新知