乐虎游戏|乐虎国际登录|欢迎你

Android PopupWindow的使用技巧

日期:2020-05-05编辑作者:计算机资讯

内容摘要

  • TextView 文本框
  • EditText控件
  • Button 与 ImageButton
  • ImageView
  • RadioButton
  • CheckBox复选框

PopupWindow是Android上自定义弹出窗口,使用起来很方便。

本节将展示所有基础的技术细节,在从比较抽象的层面讲解了系统之后,我们必须深入到技术细节,从细节方面来说明抽象知识的含义,我会在技术细节中随时提及之前讲过的抽象描述和设计,希望大家结合之前讲过的架构和流程,来理解具体的技术细节。

TextView 文本框

    ,用于显示文本的控件
    1) 代码
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, MyActivity"
    />

     2)TextView的常用属性:

        -id: 为TextView设置一个组件id,根据id,我们可以在Java代码中获取到该对象,然后进行相关属性的设置
        -layout_width: 组件宽度,一般有3种属性 wrap_content ,match_parent 和自己输入宽度
            wrap_content表示根据组件大小确定宽度即组件包含文字所占宽度越多,组件越宽;
            match_parent表示填满该组件的父容器即包含了该组件的组件如代码中的LinearLayout ;
        -layout_hight: 组件高度,一般也有3种属性,同上;
        -gravity: 设置控件中内容的对齐方向,即文字内容的对齐方向;
        -text: 设置显示的文本内容(建议把字符串写到values/string.xml文件中,然后使用@String/xxx的方式获取 , 也可以直接写在""中);
        -textColor: 设置文本的颜色(后面会附上常用颜色码);
        -textStyle: 设置文本显示风格,三个可选属性 normal(无效果) ,bold(加粗) ,italic(斜体);
        -background: 控件背景颜色,即填充整个控件的颜色;

    3)在textview控件中引入string.xml中写好的文本的方法:

        第一步:现在string.xml文件中加入你要显示的文本,并命名:

            <?xml version="1.0" encoding="utf-8"?>
            <resources>
                <string name="app_name">MyActivity</string>
                <string name="hello">hello ,你好</string>
            </resources>

        第二步:然后在控件中引入:

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="@string/hello"
                />

PopupWindow的构造函数为

创建工程

EditText控件  

 ,与TextView控件类似,最大的区别就是EdiText允许用户输入

    1) 代码
            <EditText
            android:id="@+id/eidt"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />
     2)EditText常用属性:
            -id: 为EditText设置一个组件id;
            -layout_weith: 设置控件的宽度;
            -layout_hight: 设置控件的高度;                

            -inputType(textPassword): 设置输入内容为密码;
            -inputType(Phone): 设置输入的内容为号码;
            -maxLength: 设置输入的最大文本数, 参数为数字例如 android:maxLength=“5”;
            -maxLines: 设置最大行数,参数为数字;
            -minLines: 设置最小行数,参数为数字;
            -hint: 设置默认提示文本;
            -textColorHint: 设置默认提示文本颜色;
            -capitalize: 设置英文字母大小写属性,参数包含:
            sentences: 仅第一个字母大写
            words: 单词首字母大写
            characyers: 全部字母大写;
    3) EditText控件的绑定:
        绑定控件的方法也都一样,在onCreate方法中使用findViewById()方法:

        public class MyActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //绑定main.xml文件中的EdiText控件
            EditText editText = (EditText) findViewById(R.id.edit);
            }
        }

    4) EditText获取用户输入:

        绑定后获取用户的输入很容易,使用getText()方法即可:

        editText.getText();//获取用户输入的方法

        值得一提的是这个方法直接写在绑定好的EditText语句后面是不行的!准确的说是获取不到输入的内容,我们需要一个 触发事件在输入完成后再触发获取输入的方法,就能正常拿到数据啦!下面看代码:

            EditText editText;
            TextView text;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
         
                editText = (EditText) findViewById(R.id.edit);
                text = (TextView) findViewById(R.id.text);
         
                text.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        text.setText(editText.getText());;
                    }
                });
         
            }

        text.setOnClickListener()方法是text监听方法.用来监听TextView的点击事件。
        整个流程就是在输入文本后点击text然后text的文本就会被替换成你输入的文本.

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

工程详解

Button 与 ImageButton

    本节学习Android基本控件按钮控件,Button和ImageButton用法基本类似,所以本节重点讲解Button控件。

    1)代码:

       <Button
            android:id="@+id/btn"
            android:text="普通按钮"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    2)Button的其他常用属性:

    -background 背景 可以是颜色或者图片或这xml资源
    -text        按钮显示的文字
    -textColor    按钮文字颜色
    -textSize    按钮文字大小

    3)Button控件的绑定和监听:

    绑定

        btn = (Button) findViewById(R.id.btn);

    监听的方法很常用

                btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(MainActivity.this , "button 被按下" , Toast.LENGTH_LONG).show();
                }
            });

    4)Toast方法是常见的黑色提示框,自动消失。

        完整代码:

    
        public class MainActivity extends Activity {
         
            private Button btn;//声明全局变量
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
         
                //绑定控件
                btn = (Button) findViewById(R.id.btn);
                //监听控件
                btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this , "button 被按下" , Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }

contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。

按钮触发展示Hello World

ImageView

    ,ImageView 图像视图,顾名思义,是一个用来显示图片的控件。

    1)代码:

    <ImageView
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/ic_launcher"/>

    2)ImageView的常用属性:

    -background 设置控件背景    当固定宽度时会拉伸图片
    -src        设置控件填充内容    固定宽度时不会拉伸图片

    3)绑定

    img = (ImageView) findViewById(R.id.imageview);

    ImageView没有啥监听方法,一般ImageView用来实现app的图片轮播功能。这会用到修改图片显示的方法

    常用的修改方法:

        -setImageResource(int id);    使用内部资源图片替换默认图片,id为R.drawable.图片名称
        -setImageBitmap(Bitmap bitmap);    使用bitmap 替换默认图片,bitmap一般通过网络获取

    使用方法:

        img.setImageResource(R.mipmap.ic_launcher);

focusable为是否可以获得焦点,这是一个很重要的参数,也可以通过

输入内容展示Hello World

RadioButton

    ,RadioButton单选按钮,就是几个选项只能选中一个。 因此我们要把RadioButton放到RadioGroup按钮组中,从而实现 单选功能!

    1)代码:

     <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
     
            <RadioButton
                android:id="@+id/btnMan"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="男"
                android:checked="true"/>
     
            <RadioButton
                android:id="@+id/btnWoman"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="女"/>
        </RadioGroup>

    2)控件的监听方法:

        ReadioGroup监听方法:setOnCheckedChangeListener()

    3)获取选择的值的方法:getText()

            RadioGroup radgroup = (RadioGroup) findViewById(R.id.radioGroup);
            //第一种获得单选按钮值的方法  
            //为radioGroup设置一个监听器:setOnCheckedChanged()  
            radgroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    RadioButton radbtn = (RadioButton) findViewById(checkedId);
                    Toast.makeText(getApplicationContext(), "按钮组值发生改变,你选了" + radbtn.getText(), Toast.LENGTH_LONG).show();
                }
            });

        获得RadioButton相关信息的方法:

        -getClidCont() 获得按钮组中的单选按钮的数目
        -getClindAt()  根据索引值获得单选按钮 (参数为索引值 0,1,2,3..)
        -isChecked()   判断按钮是否被选中(参数为true/false)

public void setFocusable(boolean focusable)

创建工程

CheckBox复选框

    1)代码:

        <CheckBox
            android:id="@+id/checkbox"
            android:text="苹果"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <CheckBox
            android:id="@+id/checkbox1"
            android:text="香蕉"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <CheckBox
            android:id="@+id/checkbox2"
            android:text="大鸭梨"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    2)监听方法:

        可以同时选中多个选项,至于获得选中的值,一般是为每个CheckBox添加事件:setOnCheckedChangeListener

        public class MyActivity extends Activity implements View.OnClickListener,CompoundButton.OnCheckedChangeListener{
         
            private CheckBox cb_one;
            private CheckBox cb_two;
            private CheckBox cb_three;
            private Button btn_send;
         
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
         
                cb_one = (CheckBox) findViewById(R.id.cb_one);
                cb_two = (CheckBox) findViewById(R.id.cb_two);
                cb_three = (CheckBox) findViewById(R.id.cb_three);
                btn_send = (Button) findViewById(R.id.btn_send);
         
                cb_one.setOnCheckedChangeListener(this);
                cb_two.setOnCheckedChangeListener(this);
                cb_three.setOnCheckedChangeListener(this);
                btn_send.setOnClickListener(this);
         
            }
         
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
               if(compoundButton.isChecked()) Toast.makeText(this,compoundButton.getText().toString(),Toast.LENGTH_SHORT).show();
            }
         
             //统一监听
            @Override
            public void onClick(View view) {
                String choose = "";
                if(cb_one.isChecked())choose += cb_one.getText().toString() + "";
                if(cb_two.isChecked())choose += cb_two.getText().toString() + "";
                if(cb_three.isChecked())choose += cb_three.getText().toString() + "";
                Toast.makeText(this,choose,Toast.LENGTH_SHORT).show();
            }
        }

来设置,如果focusable为false,在一个Activity弹出一个PopupWindow,按返回键,由于PopupWindow没有焦点,会直接退出Activity。如果focusable为true,PopupWindow弹出后,所有的触屏和物理按键都有PopupWindows处理。

本节开始讲解具体的过程和具体的代码,讲解内容适合Android初学者,希望你已经顺利安装好Android Studio。

如果PopupWindow中有Editor的话,focusable要为true。

图片 1

下面实现一个简单的PopupWindow

打开Android Studio ,选择“Start a new Android Studio project”.这是创建新工程的菜单。下面的选项依次为:

主界面的layout为:

打开一个已经创建的工程

<RelativeLayout xmlns:android=""

    xmlns:tools=""

    android:id="@+id/layout_main"

    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" >

    <Button

        android:id="@+id/btn_test_popupwindow"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerInParent="true"

        android:text="@string/app_name" />

</RelativeLayout>

从版本控制器检出一个工程

PopupWindow的layout为:

从Eclipse活着Gradle引入并转化为Android Studio的工程

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=""

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:background="#000000" >

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="80dp"

        android:text="@string/app_name" 

        android:textColor="#ffffffff"

        android:layout_centerInParent="true"

        android:gravity="center"/>

</RelativeLayout>

引入一个Android示例的工程(google为我们准备了很多Android的例子)

Activity的代码为:

配置

public class MainActivity extends Activity {

    private Button mButton;

    private PopupWindow mPopupWindow;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        View popupView = getLayoutInflater().inflate(R.layout.layout_popupwindow, null);

        mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);

        mPopupWindow.setTouchable(true);

        mPopupWindow.setOutsideTouchable(true);

        mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

        mButton = (Button) findViewById(R.id.btn_test_popupwindow);

        mButton.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                mPopupWindow.showAsDropDown(v);

            }

        });

    }

}

文档及说明。

这三行代码

图片 2

mPopupWindow.setTouchable(true);

接下来是为工程命名,公司域名,工程路径。我这里使用的是mac 系统。目录可能和你的不一样。需要注意的是公司域名与应用程序的名字会组成我们应用程序的唯一包名,该包名必须是全世界唯一的,这样在你提交app到google play等应用超市的时候,不会因为包名冲突而无法提交APP。

mPopupWindow.setOutsideTouchable(true);

图片 3

mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

接下来选择APP可以支持的最旧的Android系统,目前只要支持4.0以上就能覆盖绝大多数Android手机了。

的作用是点击空白处的时候PopupWindow会消失

图片 4

mPopupWindow.showAsDropDown(v);

这是作为起始页的Activity可选的样式。在我们这个简单的例子里面,选择“Empty Activity”就可以了,我们只是为了解释最基本的Android开发要点。

这一行代码将PopupWindow以一种向下弹出的动画的形式显示出来

图片 5

public void showAsDropDown(View anchor, int xoff, int yoff)

这一步是为了给起始页的Activity及其布局设定名称,使用默认值就好了。

这个函数的第一个参数为一个View,我们这里是一个Button,那么PopupWindow会在这个Button下面显示,xoff,yoff为显示位置的偏移。

图片 6

点击按钮,就会显示出PopupWindow

点击Finish之后,你就得到了一个最简单的工程,这个工程默认的执行效果就是在首页显示“Hello World”.

图片 7

图片 8图片 9

很多时候我们把PopupWindow用作自定义的菜单,需要一个从底部向上弹出的效果,这就需要为PopupWindow添加动画。

点击Android Studio左上角“app”旁边的三角符号,会弹出对话框,要求你选择合适的模拟器,图中“54test”是我之前创建的,如果你是新建的系统,那么需要点击该行最右边的按钮,来创建新的模拟器。

在工程res下新建anim文件夹,在anim文件夹先新建两个xml文件

图片 10

menu_bottombar_in.xml

选择左下角的“Create Virtual Device..”。

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="" >

    <translate

        android:duration="250"

        android:fromYDelta="100.0%"

        android:toYDelta="0.0" />

</set>

图片 11

menu_bottombar_out.xml

首先选中左边的“Phone”,然后选择合适的手机类型,然后点击Next,进入详细参数的设计界面。

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="" >

    <translate

        android:duration="250"

        android:fromYDelta="0.0"

        android:toYDelta="100%" />

</set>

图片 12

在res/value/styles.xml添加一个sytle

设置基本的参数,此时在界面的右下角有些红色的提示,那是提示表示需要选择支持x86系统的镜像文件,这些文件是为了提高你在pc机上使用模拟器调试APP的性能。

   <style name="anim_menu_bottombar">

        <item name="android:windowEnterAnimation">@anim/menu_bottombar_in</item>

        <item name="android:windowExitAnimation">@anim/menu_bottombar_out</item>

    </style> 

图片 13

Acivity修改为

如果你要测试多个Android版本,你就需要多安装几个这样的镜像文件了。

public class MainActivity extends Activity {

图片 14图片 15

    private PopupWindow mPopupWindow;

如果安装模拟器成功,重新点击左上角的运行按钮,你就会看到这两个界面,模拟器有个锁,滑动解锁之后,你就可以看到“Hello World”了。

    @Override

其实我不太喜欢这么详尽的解释一个创建工程的过程,但是为了照顾初学者,防止他们因为无法有个好的开始而放弃继续学习的信心,我尽可能多的展示了创建工程时的界面。希望你能看到最后的“Hello World”,如果这个过程中遇到什么问题,只能自行搜索解决了。

    protected void onCreate(Bundle savedInstanceState) {

工程详解

        super.onCreate(savedInstanceState);

如果你已经成功运行了模拟器,并看到了最终的界面,那我们开始讲解代码的详细内容。

        setContentView(R.layout.activity_main);

首先是AndroidManifest.xml文件

        View popupView = getLayoutInflater().inflate(R.layout.layout_popupwindow, null);

package="com.flowerbell.wsli.helloworld">

        mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);

android:allowBackup="true"

        mPopupWindow.setTouchable(true);

android:icon="@mipmap/ic_launcher"

        mPopupWindow.setOutsideTouchable(true);

android:label="@string/app_name"

        mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

android:supportsRtl="true"

        mPopupWindow.getContentView().setFocusableInTouchMode(true);

android:theme="@style/AppTheme">

        mPopupWindow.getContentView().setFocusable(true);

这是整个APP的说明文件,重要的部分我用红色标注,其它内容你可以自学。MainActivity的Main和Launcher属性说行表明我们用一个叫做MainActivity的界面作为APP的启动界面。而APP的包名叫做com.flowerbell.wsli.helloworld。还记得吗?这个包名是在提交APP市场时候,用来与其它APP区分开得唯一标示。

        mPopupWindow.getContentView().setOnKeyListener(new OnKeyListener() {

接下来是activity_main.xml文件,这是个布局文件。

            @Override

图片 16图片 17

            public boolean onKey(View v, int keyCode, KeyEvent event) {

选中Text,会展示出布局代码和布局效果。

                if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0

xmlns:tools=""

                        && event.getAction() == KeyEvent.ACTION_DOWN) {

android:layout_width="match_parent"

                    if (mPopupWindow != null && mPopupWindow.isShowing()) {

android:layout_height="match_parent"

                        mPopupWindow.dismiss();

android:paddingBottom="@dimen/activity_vertical_margin"

                    }

android:paddingLeft="@dimen/activity_horizontal_margin"

                    return true;

android:paddingRight="@dimen/activity_horizontal_margin"

                }

android:paddingTop="@dimen/activity_vertical_margin"

                return false;

tools:context="com.flowerbell.wsli.helloworld.MainActivity">

            }

android:layout_width="wrap_content"

        });

本文由乐虎游戏发布于计算机资讯,转载请注明出处:Android PopupWindow的使用技巧

关键词:

第2章第4节界面MVC(下)

稍好点的两全 内容摘要 纯手打.png 地点讲授的亲自过问,通过二个函数就完事了七个简便的多少体现和改产生效,不...

详细>>

iOS开荒-下载word/pdf/pages/txt等文件并预览

好久没碰iOS了,前几天回顾了一下之前所做的项目,发现有一些新奇的东西。今天我问来讲讲QuickLook。这个功能用的...

详细>>

Xcode 9.2打包或者调试,iOS 8.2~iOS8.0的系统加载图片扭曲

场景:1、Xcode 9.2调治真机,打包测量检验,或许打包上线2、当前调节和测验的是iOS8.2真机,5S ,iOS8.1模拟器的相干机...

详细>>

【ag娱乐平台】项目常见的文件

这个系列主要写一些平时ios开发和学习过程中所记录的问题、随笔和解决方法,我会尽量用更多的截图或者gif图来还...

详细>>