Android中popupWindow的简单应用
来源:互联网 发布:centos 6.4 厂家 编辑:程序博客网 时间:2024/06/05 15:36
学习Android也有两个多月了,之前一直没有写博客,所以接下来的博客也不会从最开始的那些很基本的控件写起,这次来介绍的是popupWindow。
popupWindow这个类用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的。因为会弹出一个窗口,所以往往我们也会用到LayoutInflater,刚好可以复习一下上一篇博客的内容,话不多说,见代码。
MainActivity.java
package com.whisker.popupwindowtest;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private PopupWindow popupWindow;private View view;private View titleView;private TextView titleTextView;private ListView listView;private List<String> groups; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); titleView = this.findViewById(R.id.top_title); titleTextView = (TextView) titleView.findViewById(R.id.tvTitle); titleTextView.setText("Text2"); titleTextView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Log.i("123", "321");showWindow(view);}}); }private void showWindow(View parent) {if(popupWindow == null){LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);view = layoutInflater.inflate(R.layout.group_list, null);listView = (ListView) view.findViewById(R.id.lvGroup);groups = new ArrayList<String>();groups.add("我的微博");groups.add("好友");groups.add("亲人");groups.add("陌生人");GroupAdapter groupAdapter = new GroupAdapter(this,groups);listView.setAdapter(groupAdapter);popupWindow = new PopupWindow(view,200,250);}popupWindow.setFocusable(true);popupWindow.setOutsideTouchable(true);popupWindow.setBackgroundDrawable(new BitmapDrawable());WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);int xPos = windowManager.getDefaultDisplay().getWidth()/2 - popupWindow.getWidth()/2;Log.i("whisker", "windowManager.getDefaultDisplay().getWidth()/2:" + windowManager.getDefaultDisplay().getWidth() / 2);Log.i("whisker", "popupWindow.getWidth()/2:" + popupWindow.getWidth() / 2);Log.i("whisker", "xPos:" + xPos);popupWindow.showAsDropDown(parent, xPos, 0);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {Toast.makeText(MainActivity.this, "你点的是" + groups.get(position), Toast.LENGTH_LONG).show();if(popupWindow != null){popupWindow.dismiss();}}});}}
GroupAdapter.java
package com.whisker.popupwindowtest;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class GroupAdapter extends BaseAdapter{private Context context;private List<String> list;public GroupAdapter(Context context,List<String> list){this.context = context;this.list = list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup viewGroup) {ViewHolder holder;if (convertView == null) {convertView=LayoutInflater.from(context).inflate(R.layout.group_item_view, null);holder=new ViewHolder();convertView.setTag(holder);holder.groupItem=(TextView) convertView.findViewById(R.id.groupItem);}else{holder = (ViewHolder) convertView.getTag();}holder.groupItem.setText(list.get(position));return convertView;}static class ViewHolder{TextView groupItem; }}
activity_main.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:orientation="vertical" tools:context="com.whisker.popupwindowtest.MainActivity" > <include android:id="@+id/top_title" layout="@layout/title_two_button"/></RelativeLayout>
title_two_button
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="45dip" android:background="@drawable/search_bg" android:gravity="center" android:text="Title" android:textColor="@android:color/black" android:textSize="25dip"/> <Button android:id="@+id/button_left" android:layout_width="49dip" android:layout_height="36dip" android:layout_gravity="center_vertical" android:background="@drawable/title_button"/> <Button android:id="@+id/button_right" android:layout_width="49dip" android:layout_height="36dip" android:layout_gravity="right" android:background="@drawable/title_button2" android:layout_marginRight="2dip" android:layout_marginTop="4dip"/> </FrameLayout>
在这个xml文件中,我们看到两个Button空间中的background属性中指向了“button.xml”和“button2.xml”
这两个xml能够做到Button的动态变化,点击和非点击的不同效果
button.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@drawable/title_new_selected"/> <item android:drawable="@drawable/title_new_normal"/></selector>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@drawable/title_reload_selected"/> <item android:drawable="@drawable/title_reload_normal"/></selector>
我们看到了LayoutInflater指向了group_list这个xml,group_list.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/group_bg" > <TextView android:id="@+id/groupAll" android:layout_width="match_parent" android:layout_height="40dip" android:gravity="center" android:background="@drawable/grouplist_fixed_item_bg" android:text="All" style="@style/grouplist_item_textview" /> <ImageView android:id="@+id/iv_group_list_bg_divider" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/group_divider" /> <ListView android:id="@+id/lvGroup" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="@drawable/grouplist_item_bg_sel" android:drawSelectorOnTop="true" android:divider="@drawable/group_divider" android:cacheColorHint="#000000" android:dividerHeight="2.0px"/> </LinearLayout>
我们看到了,这里使用了一个style,是可以用在整个项目中的一个固定格式。
styles
<pre name="code" class="html"><resources xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme.Light"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name="grouplist_item_textview"> <item name="android:textSize">18sp</item> <item name="android:textColor">#ffffffff</item> </style></resources>
group_item_view.xml
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="40dip" android:orientation="vertical" > <TextView android:id="@+id/groupItem" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" style="@style/grouplist_item_textview"/> </LinearLayout>
</pre>groulist_fixed_bg.xml<pre>
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/grouplist_item_bg_sel" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/grouplist_item_bg_sel" /> <item android:state_selected="true" android:drawable="@drawable/grouplist_item_bg_sel" /> <item android:state_focused="true" android:drawable="@drawable/grouplist_item_bg_sel" /></selector>
这就是整个程序的效果图
0 0
- Android中popupWindow的简单应用
- android PopupWindow 简单应用
- android中PopupWindow的应用实例
- android中popupwindow的简单使用
- Android中PopupWindow的简单操作和动画的操作
- 【Android】PopupWindow的简单运用
- android PopupWindow 的简单使用
- Android PopupWindow的简单使用
- android PopupWindow的简单实用
- Android PopupWindow的简单显示
- Android popupwindow的简单使用
- Android PopupWindow的简单使用
- Android PopupWindow的简单使用
- Android中PopupWindow的使用
- Android中Popupwindow的用法
- Android中PopupWindow的用法
- Android中PopupWindow的使用
- Android中PopupWindow的使用
- IP网络,光网络以及轨道交通的高速卸载随想
- Dallas one-wire temperature reading on BeagleBone Black with dto (未翻译)
- Sqoop 1.99.3 安装
- C#__Dictionary类 __类似java Map 键值对
- 【LeetCode-面试算法经典-Java实现】【024-Swap Nodes in Pairs(成对交换单链表的结点)】
- Android中popupWindow的简单应用
- 设置圆角按钮的方法
- 【LeetCode-面试算法经典-Java实现】【025-Reverse Nodes in k-Group(单链表中k个结点一组进行反转)】
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- Objective-C之KVC(键值编码)详解
- solr5.2.1环境搭建
- 杭电ACM2032java做法
- 如何在中关村做好一门小生意——北漂18年(18)
- android布局