精华内容
下载资源
问答
  • 上面这张图是用savefiledialog建立的对象显示出来的 下面这张图是对方软件的 ...问题:为什么不一样呢,怎么让C#也能做的跟下面的一样,有没什么简洁一点的方式,比如什么类或者设置什么属性了?
  • AlertDialog对话框是程序中常用的控件,有时为了程序界面风格的统一或者为了使用效果需要自定义AlertDialog对话框的一些属性,比如,字符的颜色,背景什么的。笔者最近在使用对话框时就遇到这样的问题,开始我选择了...

            AlertDialog对话框是程序中常用的控件,有时为了程序界面风格的统一或者为了使用效果需要自定义AlertDialog对话框的一些属性,比如,字符的颜色,背景什么的。笔者最近在使用对话框时就遇到这样的问题,开始我选择了这个主题的对话框:

    程序的界面是这样子的:

    在应用这个主题后对话框的效果是这样的:

            看起来对话框还可以,大小比较适中,位置也蛮协调,但有几点需要调整和修改,一个是按键的颜色可能是白色,与背景混了,显示不出来;第二这个对话框有警示的作用,如果把白色的背景换成其他颜色可能警示效果更好。于是就找修改或设置这两个属性的方法,找到很多,有的说得很玄乎,追根溯源,最后用反射啥的实现,貌似很复杂,有的用原生的代码实现,相对简单。我想用原生的代码实现,无奈运气不好,用getButton方法无论怎么样都无法得到button的实例,把这个方法放在show方法前和后都显示button对象为空,所以代码执行到给button设置颜色时就闪退,看来只有另找出路。最后终于找到目前比较满意的实现方案。就是本文介绍的修改Theme方法。

            这个方法的实质是利用style.xml文件对选用的Theme主题中不太满意的属性进行修改,以达到满意的效果。既然如此,那本方法的第一步是要选择系统的主题,这个选择是在AlertDialog.Builder变量初始化时完成,如第1张图所示。从主题的列表中选择一个基本满意的主题,然后再对这个主题进行修改。第一次选定的主题可称为父主题。前面的这三张图可以说是父主题的选择过程。

            然后第二步是建立自定义主题,这个就是设备最终使用的AlertDialog对话框主题。自定义主题的主要属性都需要继承父主题的属性。为此,打开android studio 中res文件夹里的style.xml文件,新建一个style标签,name可以随意取,自已能记住就好,然后要有parent的说明,在parent后面的列表选项中选中父主题的名字,这样就表达了自定义主题是继承了父主题的属性这样的意图。

            第三步是配置色彩资源,这一步要根据你AlertDialog对话框最终效果的需要进行配置,比如笔者这个对话框的主要作用是警示,因此在色彩配置上需要红色、黄色、白色。因此,打开res文件夹中的colors.xml文件,把需要的这几种颜色加进去,颜色的名字也可随意取,为了好记,最好跟色彩相关。下面这个图就是配置好了色彩以后的color.xml文件中的代码:

            第四步是定义AlertDialog对话框背景和字符的色彩。这个工作要回到style文件里来做。用item来设置各种属性。用android:background设置对话框背景色彩,但如果要透明效果,要用android:windowBackground来设置,用android:textColor设置标题和按键字符的颜色,看到过分别设置按键颜色的语法,但没有试过。用android:textColorPrimary设置内容字符(message)的颜色。下图是本文设置完成后的style文件(透明对话框)。图中Theme_mine就是自定义主题的名字。

            第五步是加载自定义对话框并进行调整。回到android studio编辑器,在AlertDialog.Builder变量初始化时主题选择的列表中已经能看到自定义主题的名字,选中它就把自定义主题加载到了对话框的设置中。如下图:

     

    然后运行程序,调整对话框的显示效果,直到满意。下面是这个对话框在真机上的显示图,供参考。本文有demo代码可以下载:

    https://download.csdn.net/download/hhyyqq/12106585

     

     

    展开全文
  • 对于弹出的内容完全由自己来掌控,想实现什么样子就实现什么样子,很灵活 使用方法 BottomSheetDialog来自design兼容包,使用需要添加依赖。android studio 添加依赖如下: dependencies { compile ...
  • 你有没有想过把通用对话框作为你的窗口的一个View是什么样子的?vc
  • C#嵌套窗体,先弹出子窗体,再弹出对话框,c#2008编写的,有没有兴趣看一下呢?其实也没有什么,一个入门级的窗体实例,运行后如上图所示的样子
  • Android 6.0新控件 BottomSheetDialog | 底部对话框 介绍及使用详情extends AppCompatDialog ...先看看效果对于弹出的内容完全由自己来掌控,想实现什么样子就实现什么样子,很灵活使用方法BottomSheet

    Android 6.0新控件 BottomSheetDialog | 底部对话框 介绍及使用详情

    extends AppCompatDialog

    Base class for Dialogs styled as a bottom sheet

    基于Dialog样式的一个底部对话框

    先看看效果

    这里写图片描述这里写图片描述

    对于弹出的内容完全由自己来掌控,想实现什么样子就实现什么样子,很灵活

    使用方法

    BottomSheetDialog来自design兼容包,使用需要添加依赖。android studio 添加依赖如下:

    dependencies {
        compile ‘com.android.support:design:23.2.0+‘
    }

    1.XML中添加布局文件

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="2">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
    
                <ImageView
                    android:id="@+id/image_man"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="?android:selectableItemBackground"
                    android:gravity="center"
                    android:padding="10dp"
                    android:src="@drawable/man"/>
            </RelativeLayout>
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1">
    
                <ImageView
                    android:id="@+id/image_women"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="?android:selectableItemBackground"
                    android:gravity="center"
                    android:padding="10dp"
                    android:src="@drawable/women"/>
            </RelativeLayout>
    
        </LinearLayout>

    2.在代码中使用

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_play_bottom_sheet_dialog);
            showContentView();
            bindingView.bottomsheet.textviewTitle.setText("BottomSheetDialog");
            bindingView.bottomsheet.toolbarBack.setOnClickListener(this);
            bindingView.btnBsd1.setOnClickListener(this);
            initView();
        }
    
        private void initView() {
            View view = View.inflate(this, R.layout.bottom_dialog, null);
            ImageView man = (ImageView) view.findViewById(R.id.image_man);
            ImageView women = (ImageView) view.findViewById(R.id.image_women);
            man.setOnClickListener(this);
            women.setOnClickListener(this);
    
            bsd1 = new BottomSheetDialog(this);
            bsd1.setContentView(view);
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.toolbar_back:
                    finish();
                    break;
                case R.id.btn_bsd1:
                    bsd1.show();
                    break;
                case R.id.image_man:
                    ToastUtil.show("男");
                    bsd1.dismiss();
                    break;
                case R.id.image_women:
                    ToastUtil.show("女");
                    bsd1.dismiss();
                    break;
            }
        }

    OK,这就完成了如效果图上的效果,可以自己尝试一下,下面贴上一些可以自己定制需求常用的方法

    setCancelable(boolean cancelable) | 设置此对话框是否取消与BACK关联

    setCanceledOnTouchOutside | 当设置窗口的边界之外触及这个对话框是否被取消

    官方API

    完整代码点我下载GitHub

    Thank you

    • 以上仅本人学习中遇到的问题,如有更多意见欢迎随时交流 issues
    • email:coderguoy@gmail.com
    展开全文
  • 内容索引:C#源码,菜单窗体,嵌套窗体,对话框 C#嵌套窗体,先弹出子窗体,再弹出对话框,c#2008编写的,有没有兴趣看一下呢?其实也没有什么,一个入门级的窗体实例,运行后如上图所示的样子
  • 各位老哥,在VS2012MFC基于对话框中,我已经在资源中添加了toolbar,在消息函数oncreat中也添加了图中的代码,网上看了一下午都是这样子就可以了,可是我就是没有显示出工具栏唉...为什么呢?求各位大佬指点迷津 !...
  • 心情不好,恩,不扯淡了。直接讲。 ================================== 在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础...原谅我的无耻,原创转载什么的也不在意了,原文在这里,今天感觉有点累,...

    心情不好,恩,不扯淡了。直接讲。


    ==================================

    在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础上加了我简单加了一层灰色透明背景。这样子界面效果看起来会更友好一点,好吧。原谅我的无耻,原创转载什么的也不在意了,原文在这里,今天感觉有点累,恩。主要是大神不能带我飞了,非常是失落,好吧,不说废话了。

    在游戏中,我们经常须要实现弹出一个模态对话框,比方说游戏暂停,退出提示对话框等

    对话框特点例如以下:


    1.可定制的,比方说背景图,标题,文本,按钮等,依据须要加入和设置

    2.须要屏蔽对话框下层的触摸

    3.为了友好的效果显示。把不可触摸的部分变为灰色


    先来看一张效果图:




    为了完毕这样一个效果,思路例如以下:


    1.设计一个弹出对话框的类PopupLayer,继承于LayerColor。这样子我们就能够设置背景版透明,看起来好像把对话框下层的变灰暗了


            setColor(ccc3(0,0,0));  
            setOpacity(128);  


    2.加入触摸事件。屏蔽下层触摸。也就是在Layer中设置不向下传递

            //add layer touch event
    	auto listener = EventListenerTouchOneByOne::create();
    	listener->setSwallowTouches(true);//不向下传递触摸
    	listener->onTouchBegan = CC_CALLBACK_2(PopupLayer::onTouchBegan, this);
    	listener->onTouchMoved = CC_CALLBACK_2(PopupLayer::onTouchMoved, this);
    	listener->onTouchEnded = CC_CALLBACK_2(PopupLayer::onTouchEnded, this);
    	auto dispatcher = Director::getInstance()->getEventDispatcher();
    	dispatcher->addEventListenerWithSceneGraphPriority(listener, this);

    3.PopupLayer类 实现 可定制对话框标题,按钮,文本,背景图片等


        //标题
        void setTitle(const char* title, int fontsize = 20);
        //文本
        void setContentText(const char* text, int fontsize = 20, int padding = 50, int paddintTop = 100);
        //设置button回调事件
        void setCallbackFunc(Ref* target, SEL_CallFuncN callfun);
         //加入button
        bool addButton(const char* normalImage, const char* selectedImage, const char* title, int tag = 0);

    4.按钮回调函数实现也比較简单,首先设置外部的回调对象和回调函数


        Ref* m_callbackListener;    //回调对象
        SEL_CallFuncN m_callback;   //回调函数
    
        //设置按钮的回调函数
        void PopupLayer::setCallbackFunc(Ref* target, SEL_CallFuncN callfun){
        m_callbackListener = target;
        m_callback = callfun;  
        }


    然后在PopupLayer类中比方说我们加入一个菜单按钮


     // 创建图片菜单按钮
        auto item = MenuItemImage::create(
            normalImage,
            selectedImage,
            CC_CALLBACK_1(PopupLayer::buttonCallBack,this));
        item->setTag(tag);

    设置button回调函数。然后由这个回调函数去调用外部的button监听函数。然后关闭对话框


    //button回调函数
        void PopupLayer::buttonCallBack(Ref* pSender){
        Node* node = dynamic_cast<Node*>(pSender);
        CCLog("【====PopupLayer::buttonCallBack====】touch tag: %d", node->getTag());
        if (m_callback && m_callbackListener){
            (m_callbackListener->*m_callback)(node);
        }
        this->removeFromParent();}


    5.然后使用方法也比較简单。假设须要对话框内容显示中文,能够參考:cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)这篇文章

        //弹出对话框
        pl = PopupLayer::create("BackGround.png",Size(400,350));
        pl->setTitle("title");
        pl->setContentText("Are you sure exit?

    ", 20, 60, 250); pl->setCallbackFunc(this, callfuncN_selector(WelcomeScene::popButtonCallback));//设置按钮回调 pl->addButton("pop_button.png", "pop_button.png", "yes", 0); pl->addButton("pop_button.png", "pop_button.png", "no", 1); this->addChild(pl);

    外部回调函数实现,依据tag推断点了什么按钮


    void WelcomeScene::popButtonCallback(Node *pNode){
        CCLog("【=====WelcomeScene::popButtonCallback======】button call back. tag: %d", pNode->getTag());
        //exit
        if(pNode->getTag() == 0){
            Director::getInstance()->end();
        }
    }



    恩,思路大概这样子,完整的对话框类例如以下。亲们能够复制直接使用

    #pragma once
    
    #include "cocos2d.h"
    #include "cocos-ext.h"
    
    using namespace cocos2d;
    using namespace cocos2d::extension;
    
    class PopupLayer : public LayerColor{
    public:
    	PopupLayer();
    	~PopupLayer();
    	
    	virtual bool init();
    	CREATE_FUNC(PopupLayer);
    	static PopupLayer* create(const char* backgroundImage,Size dialogSize);
    
    	//touch事件监听 屏蔽向下触摸
    	bool onTouchBegan(Touch *touch, Event *event);
    	void onTouchMoved(Touch *touch, Event *event);
    	void onTouchEnded(Touch* touch, Event* event);
    
    	//标题
    	void setTitle(const char* title, int fontsize = 20);
    	//文本
    	void setContentText(const char* text, int fontsize = 20, int padding = 50, int paddintTop = 100);
    	//设置button回调事件
    	void setCallbackFunc(Ref* target, SEL_CallFuncN callfun);
    	//加入button
    	bool addButton(const char* normalImage, const char* selectedImage, const char* title, int tag = 0);
    
    	virtual void onEnter();
    	virtual void onExit();
    
    	void backgroundFinish();
    
    private:
    	
    	void buttonCallBack(Ref* pSender);
    
    	// 文字内容两边的空白区
    	int m_contentPadding;
    	int m_contentPaddingTop;
    
    	Size m_dialogContentSize;
    
    	Ref* m_callbackListener;
    	SEL_CallFuncN m_callback;
    
    	//set and get
    	CC_SYNTHESIZE_RETAIN(Menu*, m__pMenu, MenuButton);
    	CC_SYNTHESIZE_RETAIN(Sprite*, m__sfBackGround, SpriteBackGround);
    	CC_SYNTHESIZE_RETAIN(Scale9Sprite*, m__s9BackGround, Sprite9BackGround);
    	CC_SYNTHESIZE_RETAIN(LabelTTF*, m__ltTitle, LabelTitle);
    	CC_SYNTHESIZE_RETAIN(LabelTTF*, m__ltContentText, LabelContentText);
    };

    cpp文件实现例如以下:


    #include "PopupLayer.h"
    
    PopupLayer::PopupLayer():
    	m__pMenu(NULL)
    	, m_contentPadding(0)
    	, m_contentPaddingTop(0)
    	, m_callbackListener(NULL)
    	, m_callback(NULL)
    	, m__sfBackGround(NULL)
    	, m__s9BackGround(NULL)
    	, m__ltContentText(NULL)
    	, m__ltTitle(NULL)
    {
    
    }
    
    PopupLayer::~PopupLayer(){
    	CC_SAFE_RELEASE(m__pMenu);
    	CC_SAFE_RELEASE(m__sfBackGround);
    	CC_SAFE_RELEASE(m__ltContentText);
    	CC_SAFE_RELEASE(m__ltTitle);
    	CC_SAFE_RELEASE(m__s9BackGround);
    }
    
    bool PopupLayer::init(){
    	if(!LayerColor::init()){
    		return false;
    	}
    	// 初始化须要的 Menu
    	Menu* menu = Menu::create();
    	menu->setPosition(CCPointZero);
    	setMenuButton(menu);
    
    	//add layer touch event
    	auto listener = EventListenerTouchOneByOne::create();
    	listener->setSwallowTouches(true);
    	listener->onTouchBegan = CC_CALLBACK_2(PopupLayer::onTouchBegan, this);
    	listener->onTouchMoved = CC_CALLBACK_2(PopupLayer::onTouchMoved, this);
    	listener->onTouchEnded = CC_CALLBACK_2(PopupLayer::onTouchEnded, this);
    	auto dispatcher = Director::getInstance()->getEventDispatcher();
    	dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
    
    	setColor(ccc3(0,0,0));  
    	setOpacity(128);  
    
    	return true;
    }
    
    bool PopupLayer::onTouchBegan(Touch *touch, Event *event){
    	return true;
    }
    
    void PopupLayer::onTouchMoved(Touch *touch, Event *event){
    
    }
    
    void PopupLayer::onTouchEnded(Touch* touch, Event* event){
    
    }
    
    PopupLayer* PopupLayer::create(const char* backgroundImage, Size dialogSize){
    	
    	PopupLayer* layer = PopupLayer::create();
    	
    //	layer->setSpriteBackGround(Sprite::create(backgroundImage));
    	layer->setSprite9BackGround(Scale9Sprite::create(backgroundImage));
    
    	layer->m_dialogContentSize = dialogSize;
    
    	return layer;
    }
    
    void PopupLayer::setTitle(const char* title, int fontsize /* = 20 */){
    	LabelTTF* label = LabelTTF::create(title,"",fontsize);
    	setLabelTitle(label);
    }
    
    void PopupLayer::setContentText(const char *text, int fontsize, int padding, int paddingTop){
    	LabelTTF* ltf = LabelTTF::create(text, "", fontsize);
    	setLabelContentText(ltf);
    	m_contentPadding = padding;
    	m_contentPaddingTop = paddingTop;
    }
    
    void PopupLayer::setCallbackFunc(Ref* target, SEL_CallFuncN callfun){
    	m_callbackListener = target;
    	m_callback = callfun;    
    }
    
    bool PopupLayer::addButton(const char* normalImage, const char* selectedImage, const char* title, int tag /* = 0 */){
    	
    	auto size = Director::getInstance()->getWinSize();
    	auto center = Point(size.width / 2, size.height / 2);
    
    	// 创建图片菜单按钮
    	auto item = MenuItemImage::create(
    		normalImage,
    		selectedImage,
    		CC_CALLBACK_1(PopupLayer::buttonCallBack,this));
    	item->setTag(tag);
    	item->setPosition(center);
    
    	// 加入文字说明并设置位置
    	Size itemSize = item->getContentSize();
    	LabelTTF* ttf = LabelTTF::create(title, "", 20);
    	ttf->setColor(Color3B(0, 0, 0));
    	ttf->setPosition(Point(itemSize.width / 2, itemSize.height / 2));
    	item->addChild(ttf);
    
    	getMenuButton()->addChild(item);
    
    	return true;
    }
    
    void PopupLayer::buttonCallBack(Ref* pSender){
    	Node* node = dynamic_cast<Node*>(pSender);
    	CCLog("【====PopupLayer::buttonCallBack====】touch tag: %d", node->getTag());
    	if (m_callback && m_callbackListener){
    		(m_callbackListener->*m_callback)(node);
    	}
    	this->removeFromParent();
    }
    
    void PopupLayer::onEnter(){
    	LayerColor::onEnter();
    
    	Size winSize = CCDirector::getInstance()->getWinSize();
    	Point pCenter = Point(winSize.width / 2, winSize.height / 2);
    
    //	Size contentSize ;
    	// 设定好參数。在执行时载入
    	//假设没有设置 ContentSize 。那么採取的方案是,窗体大小与传入图片一样大
    // 	if (getContentSize().equals(this->getParent()->getContentSize())) {
    // 		getSpriteBackGround()->setPosition(ccp(winSize.width / 2, winSize.height / 2));
    // 		this->addChild(getSpriteBackGround(), 0, 0);
    // 		contentSize = getSpriteBackGround()->getTexture()->getContentSize();
    // 	} else {
    // 		Scale9Sprite *background = getSprite9BackGround();
    // 		background->setContentSize(getContentSize());
    // 		background->setPosition(ccp(winSize.width / 2, winSize.height / 2));
    // 		this->addChild(background, 0, 0);
    // 		contentSize = getContentSize();
    // 	}
    	//加入背景图片
    	Scale9Sprite *background = getSprite9BackGround();
    	background->setContentSize(m_dialogContentSize);
    	background->setPosition(Point(winSize.width / 2, winSize.height / 2));
    	this->addChild(background,0,0);
    
    	// 弹出效果
    	Action* popupLayer = Sequence::create(
    		ScaleTo::create(0.0, 0.0),
    		ScaleTo::create(0.2, 1.05),
    		ScaleTo::create(0.2, 0.95),
    		ScaleTo::create(0.1, 1.0), 
    		CallFunc::create(CC_CALLBACK_0(PopupLayer::backgroundFinish,this)),
    		NULL
    		);
    	background->runAction(popupLayer);
    
    
    
    }
    
    void PopupLayer::backgroundFinish(){
    
    	Size winSize = CCDirector::getInstance()->getWinSize();
    	Point pCenter = Point(winSize.width / 2, winSize.height / 2);
    
    	// 加入按钮,并设置其位置
    	this->addChild(getMenuButton());
    	float btnWidth = m_dialogContentSize.width / (getMenuButton()->getChildrenCount() + 1);
    
    	Vector<Node*> vector = getMenuButton()->getChildren();
    	Ref* pObj = NULL;
    	int i = 0;
    	for(Node* pObj : vector){
    		Node* node = dynamic_cast<Node*>(pObj);
    		node->setPosition(Point( winSize.width / 2 - m_dialogContentSize.width / 2 + btnWidth * (i + 1), winSize.height / 2 - m_dialogContentSize.height / 3));
    		i++;
    	}
    
    	// 显示对话框标题
    	if (getLabelTitle()){
    		getLabelTitle()->setPosition(ccpAdd(pCenter, ccp(0, m_dialogContentSize.height / 2 - 35.0f)));
    		this->addChild(getLabelTitle());
    	}
    
    	// 显示文本内容
    	if (getLabelContentText()){
    		CCLabelTTF* ltf = getLabelContentText();
    		ltf->setPosition(ccp(winSize.width / 2, winSize.height / 2));
    		ltf->setDimensions(CCSizeMake(m_dialogContentSize.width - m_contentPadding * 2, m_dialogContentSize.height - m_contentPaddingTop));
    		ltf->setHorizontalAlignment(kCCTextAlignmentLeft);
    		this->addChild(ltf);
    	}
    }
    
    
    
    void PopupLayer::onExit(){
    
    	CCLog("popup on exit.");
    	CCLayerColor::onExit();
    }
    


    转载于:https://www.cnblogs.com/ldxsuanfa/p/10592056.html

    展开全文
  • 如果你想知道 他长什么样子,你可以打开你手机的QQ,长按列表中的某项, 这个时候后弹出一个黑色的小 对话框,这种就是PopupWindow了, 和AlertDialog对话框不同的是,他的位置可以是随意的;  另外AlertDialog...

    一个用于显示信息的UI控件——PopupWindow(悬浮框),

    如果你想知道 他长什么样子,你可以打开你手机的QQ,长按列表中的某项,

    这个时候后弹出一个黑色的小 对话框,这种就是PopupWindow了,

    和AlertDialog对话框不同的是,他的位置可以是随意的; 

    另外AlertDialog是非堵塞线程的,而PopupWindow则是堵塞线程的


    1)几个常用的构造方法

    我们在文档中可以看到,提供给我们的PopupWindow的构造方法有九种之多,这里只贴实际 开发中用得较多的几个构造方法:

    public PopupWindow (Context context)
    public PopupWindow(View contentView, int width, int height)
    public PopupWindow(View contentView)
    public PopupWindow(View contentView, int width, int height, boolean focusable)

    参数就不用多解释了吧,contentView是PopupWindow显示的View,focusable是否显示焦点

    2)常用的一些方法

    下面介绍几个用得较多的一些方法,其他的可自行查阅文档:

    setContentView(View contentView):设置PopupWindow显示的View

    getContentView():获得PopupWindow显示的View
    showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
    showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
    showAtLocation(View parent, int gravity, int x, int y): 相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移 PS:parent这个参数只要是activity中的view就可以了!
    setWidth/setHeight:设置宽高,也可以在构造方法那里指定好宽高, 除了可以写具体的值,还可以用WRAP_CONTENT或MATCH_PARENT, popupWindow的width和height属性直接和第一层View相对应。

    setFocusable(true):设置焦点,PopupWindow弹出后,所有的触屏和物理按键都由PopupWindows 处理。其他任何事件的响应都必须发生在PopupWindow消失之后,(home 等系统层面的事件除外)。 比如这样一个PopupWindow出现的时候,按back键首先是让PopupWindow消失,第二次按才是退出 activity,准确的说是想退出activity你得首先让PopupWindow消失,因为不并是任何情况下按back PopupWindow都会消失,必须在PopupWindow设置了背景的情况下 。

    setAnimationStyle(int):设置动画效果

    public class MainActivity extends Activity {
      private Button btn_show;
      private Context mContext;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = MainActivity.this;
        btn_show = (Button) findViewById(R.id.btn_show);
        btn_show.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            initPopWindow(v);
          }
        });
      }
      private void initPopWindow(View v) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_popup, null, false);
        Button btn_xixi = (Button) view.findViewById(R.id.btn_xixi);
        Button btn_hehe = (Button) view.findViewById(R.id.btn_hehe);
        //1.构造一个PopupWindow,参数依次是加载的View,宽高
        final PopupWindow popWindow = new PopupWindow(view,
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
        popWindow.setAnimationStyle(R.anim.anim_pop); //设置加载动画
        //这些为了点击非PopupWindow区域,PopupWindow会消失的,如果没有下面的
        //代码的话,你会发现,当你把PopupWindow显示出来了,无论你按多少次后退键
        //PopupWindow并不会关闭,而且退不出程序,加上下述代码可以解决这个问题
        popWindow.setTouchable(true);
        popWindow.setTouchInterceptor(new View.OnTouchListener() {
          @Override
          public boolean onTouch(View v, MotionEvent event) {
            return false;
            // 这里如果返回true的话,touch事件将被拦截
            // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
          }
        });
        popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));  //要为popWindow设置一个背景才有效
        //设置popupWindow显示的位置,参数依次是参照View,x轴的偏移量,y轴的偏移量
        popWindow.showAsDropDown(v, 50, 0);
        //设置popupWindow里的按钮的事件
        btn_xixi.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            Toast.makeText(MainActivity.this, "你点击了嘻嘻~", Toast.LENGTH_SHORT).show();
          }
        });
        btn_hehe.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            Toast.makeText(MainActivity.this, "你点击了呵呵~", Toast.LENGTH_SHORT).show();
            popWindow.dismiss();
          }
        });
      }
    }





    展开全文
  • 不过这个程序挺大的,而且书中也没有给出完整的源代码,只是分段分段的——我不喜欢这个样子,我想要看到我写出来的是什么东西,这是最主要的,而不是慢慢的过上几章的内容才能看到自己的作品。所以,我打...
  • 不过这个程序挺大的,而且书中也没有给出完整的源代码,只是分段分段的——我不喜欢这个样子,我想要看到我写出来的是什么东西,这是最主要的,而不是慢慢的过上几章的内容才能看到自己的作品。所以,我打算换一种...
  • 不过这个程序挺大的,而且书中也没有给出完整的源代码,只是分段分段的——我不喜欢这个样子,我想要看到我写出来的是什么东西,这是最主要的,而不是慢慢的过上几章的内容才能看到自己的作品。所以...
  • 我们来看看申论答题纸是什么样子常见的申论答题纸长这个样子,如果此题需要作答200字,会在200字的格子给予提示。我参加国考的时候,200字的小题,只给200字的空格,压根不给你多写的机会,如果多写只能超出格子,...
  • 不过这个程序挺大的,而且书中也没有给出完整的源代码,只是分段分段的——我不喜欢这个样子,我想要看到我写出来的是什么东西,这是最主要的,而不是慢慢的过上几章的内容才能看到自己的作品。所以,我打算换一种...
  • CATTI考试全面机考时代来临你准备好了吗不清楚考试内容?不知道考题顺序?不熟悉考试题量?...在弹出的对话框中依次选择语言、等级、类别和科目,选择完成后点击“确定”4.在页面中输入准考证号...
  • 接上一回我们把菜单项目给建立起来了,但是工具栏和状态栏以及中间的电子表格还没有出现,我们可以分步骤来一步步的来实现首先来实现工具栏我们说过,mainwindow有自己固定的布局我们不需要用什么其他的布局数,首先...
  • 一般的标准对话框什么样子的呢?我们还是以 word里的字体设置为例。一般都是通过菜单,工具栏,按钮等的响应而创建的对话框,而且对话框分为模态(modal)和非模态(modalless),对于标准对话框,当用户按下确定...
  • 他长什么样子,你可以打开你手机的QQ,长按列表中的某项,这个时候后弹出一个黑色的小 对话框,这种就是PopupWindow了,和AlertDialog对话框不同的是,他的位置可以是随意的; 另外AlertDialog是非堵塞线程的,而...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

对话框什么样子