日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android弹出窗口的实现(PopupWindow)

發布時間:2025/3/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android弹出窗口的实现(PopupWindow) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android彈出窗口的實現(PopupWindow)??????????????

???????

??????? ?? 最近看到新浪微博頂部欄的微博分組效果很炫,從網上查了一些資料明白原來是用PopupWindow實現的,今天自己也寫了一個例子實現了這種效果,希望對大家有幫助。

???????? PopupWindow就是彈出窗口的意思,類似windows下面的開始按鈕。PopupWindow可以實現浮層效果,而且可以自定義顯示位置,出現和退出時的動畫.

??????????? 首先定義新浪微博的頂部欄,title_two_button.xml和main.xml

??????

[html] view plaincopyprint?
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <FrameLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="wrap_content"?>??
  • ??
  • ????<TextView??
  • ????????android:id="@+id/tvtitle"??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="45dip"??
  • ????????android:background="@drawable/search_bg"??
  • ????????android:gravity="center"??
  • ????????android:text="天堂沒有路"??
  • ????????android:textColor="@color/black"??
  • ????????android:textSize="25dip"?/>??
  • ??
  • ????<Button??
  • ????????android:id="@+id/btn_title_left"??
  • ????????android:layout_width="50dip"??
  • ????????android:layout_height="35dip"??
  • ????????android:layout_gravity="center_vertical"??
  • ????????android:background="@drawable/title_button"??
  • ????????android:textColor="@color/white"?/>??
  • ??
  • ????<Button??
  • ????????android:id="@+id/btn_title_right"??
  • ????????android:layout_width="50dip"??
  • ????????android:layout_height="35dip"??
  • ????????android:layout_gravity="right"??
  • ????????android:layout_marginRight="2dip"??
  • ????????android:layout_marginTop="4dip"??
  • ????????android:background="@drawable/title_button2"??
  • ????????android:textColor="@color/white"?/>??
  • ??
  • </FrameLayout>??
  • <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content" ><TextViewandroid:id="@+id/tvtitle"android:layout_width="fill_parent"android:layout_height="45dip"android:background="@drawable/search_bg"android:gravity="center"android:text="天堂沒有路"android:textColor="@color/black"android:textSize="25dip" /><Buttonandroid:id="@+id/btn_title_left"android:layout_width="50dip"android:layout_height="35dip"android:layout_gravity="center_vertical"android:background="@drawable/title_button"android:textColor="@color/white" /><Buttonandroid:id="@+id/btn_title_right"android:layout_width="50dip"android:layout_height="35dip"android:layout_gravity="right"android:layout_marginRight="2dip"android:layout_marginTop="4dip"android:background="@drawable/title_button2"android:textColor="@color/white" /></FrameLayout> [html] view plaincopyprint?
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="fill_parent"??
  • ????android:background="@android:color/white"??
  • ????android:orientation="vertical"?>??
  • ??
  • ????<include??
  • ????????android:id="@+id/top_title"??
  • ????????layout="@layout/title_two_button"?/>??
  • ??
  • </LinearLayout>??
  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@android:color/white"android:orientation="vertical" ><includeandroid:id="@+id/top_title"layout="@layout/title_two_button" /></LinearLayout> 主要是為了實現一個這樣的界面:

    ?

    接下來定義彈出對話框的布局文件group_list.xml和group_item_view.xml

    ?

    [html] view plaincopyprint?
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="fill_parent"??
  • ????android:background="@drawable/group_bg"??
  • ????android:orientation="vertical"??
  • ?????>??
  • ??
  • ??
  • ????<ImageView??
  • ????????android:id="@+id/iv_group_list_bg_divider"??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:background="@drawable/group_divider"??
  • ?????????/>??
  • ??
  • ????<ListView??
  • ????????android:id="@+id/lvGroup"??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="fill_parent"??
  • ????????android:divider="@drawable/group_divider"??
  • ??????????/>??
  • ??
  • </LinearLayout>??
  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/group_bg"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_group_list_bg_divider"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/group_divider"/><ListViewandroid:id="@+id/lvGroup"android:layout_width="fill_parent"android:layout_height="fill_parent"android:divider="@drawable/group_divider"/></LinearLayout> [html] view plaincopyprint?
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="@dimen/group_item_height"??
  • ????android:orientation="vertical"?>??
  • ??
  • ????<TextView??
  • ????????android:id="@+id/groupItem"??
  • ???????android:textColor="#ffffff"??
  • ???????android:textSize="18dp"??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="fill_parent"??
  • ????????android:gravity="center"?/>??
  • ??
  • </LinearLayout>??
  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="@dimen/group_item_height"android:orientation="vertical" ><TextViewandroid:id="@+id/groupItem"android:textColor="#ffffff"android:textSize="18dp"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center" /></LinearLayout>

    ?

    ?

    自定義一個適配器:GroupAdapter

    ?

    ?

    [html] view plaincopyprint?
  • import?java.util.List;??
  • ??
  • import?cn.com.karl.popwindow.R;??
  • ??
  • ??
  • import?android.content.Context;??
  • import?android.graphics.Color;??
  • 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;??
  • ??
  • ????}??
  • ??
  • ????@Override??
  • ????public?int?getCount()?{??
  • ????????return?list.size();??
  • ????}??
  • ??
  • ????@Override??
  • ????public?Object?getItem(int?position)?{??
  • ??
  • ????????return?list.get(position);??
  • ????}??
  • ??
  • ????@Override??
  • ????public?long?getItemId(int?position)?{??
  • ????????return?position;??
  • ????}??
  • ??
  • ????@Override??
  • ????public?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.setTextColor(Color.BLACK);??
  • ????????holder.groupItem.setText(list.get(position));??
  • ??????????
  • ????????return?convertView;??
  • ????}??
  • ??
  • ????static?class?ViewHolder?{??
  • ????????TextView?groupItem;??
  • ????}??
  • ??
  • }??
  • import java.util.List;import cn.com.karl.popwindow.R;import android.content.Context; import android.graphics.Color; 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.setTextColor(Color.BLACK);holder.groupItem.setText(list.get(position));return convertView;}static class ViewHolder {TextView groupItem;}}

    最后是我要實現彈出對話框的核心類PoupWindowDemoActivity

    ?

    ?

    ?

    [html] view plaincopyprint?
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • ??
  • import?cn.com.karl.adapter.GroupAdapter;??
  • ??
  • 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.Window;??
  • 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?PoupWindowDemoActivity?extends?Activity?{??
  • ??
  • ????private?PopupWindow?popupWindow;??
  • ??
  • ????private?ListView?lv_group;??
  • ??
  • ????private?View?view;??
  • ??
  • ????private?View?top_title;??
  • ??
  • ????private?TextView?tvtitle;??
  • ??
  • ????private?List<String>?groups;??
  • ??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????this.requestWindowFeature(Window.FEATURE_NO_TITLE);??
  • ????????setContentView(R.layout.main);??
  • ??
  • ????????top_title?=?this.findViewById(R.id.top_title);??
  • ??
  • ????????tvtitle?=?(TextView)?top_title.findViewById(R.id.tvtitle);??
  • ??
  • ????????tvtitle.setText("天堂沒有路");??
  • ??
  • ????????tvtitle.setOnClickListener(new?View.OnClickListener()?{??
  • ??
  • ????????????@Override??
  • ????????????public?void?onClick(View?v)?{??
  • ????????????????showWindow(v);??
  • ????????????}??
  • ????????});??
  • ??
  • ????}??
  • ??
  • ??????
  • ????private?void?showWindow(View?parent)?{??
  • ??
  • ????????if?(popupWindow?==?null)?{??
  • ????????????LayoutInflater?layoutInflater?=?(LayoutInflater)?getSystemService(Context.LAYOUT_INFLATER_SERVICE);??
  • ??
  • ????????????view?=?layoutInflater.inflate(R.layout.group_list,?null);??
  • ??
  • ????????????lv_group?=?(ListView)?view.findViewById(R.id.lvGroup);??
  • ????????????//?加載數據??
  • ????????????groups?=?new?ArrayList<String>();??
  • ????????????groups.add("全部");??
  • ????????????groups.add("我的微博");??
  • ????????????groups.add("好友");??
  • ????????????groups.add("親人");??
  • ????????????groups.add("同學");??
  • ????????????groups.add("朋友");??
  • ????????????groups.add("陌生人");??
  • ??
  • ????????????GroupAdapter?groupAdapter?=?new?GroupAdapter(this,?groups);??
  • ????????????lv_group.setAdapter(groupAdapter);??
  • ????????????//?創建一個PopuWidow對象??
  • ????????????popupWindow?=?new?PopupWindow(view,?300,?350);??
  • ????????}??
  • ??
  • ????????//?使其聚集??
  • ????????popupWindow.setFocusable(true);??
  • ????????//?設置允許在外點擊消失??
  • ????????popupWindow.setOutsideTouchable(true);??
  • ??
  • ????????//?這個是為了點擊“返回Back”也能使其消失,并且并不會影響你的背景??
  • ????????popupWindow.setBackgroundDrawable(new?BitmapDrawable());??
  • ????????WindowManager?windowManager?=?(WindowManager)?getSystemService(Context.WINDOW_SERVICE);??
  • ????????//?顯示的位置為:屏幕的寬度的一半-PopupWindow的高度的一半??
  • ????????int?xPos?=?windowManager.getDefaultDisplay().getWidth()?/?2??
  • ????????????????-?popupWindow.getWidth()?/?2;??
  • ????????Log.i("coder",?"xPos:"?+?xPos);??
  • ??
  • ????????popupWindow.showAsDropDown(parent,?xPos,?0);??
  • ??
  • ????????lv_group.setOnItemClickListener(new?OnItemClickListener()?{??
  • ??
  • ????????????@Override??
  • ????????????public?void?onItemClick(AdapterView<?>?adapterView,?View?view,??
  • ????????????????????int?position,?long?id)?{??
  • ??
  • ????????????????Toast.makeText(PoupWindowDemoActivity.this,??
  • ????????????????????????groups.get(position),?1000)??
  • ????????????????????????.show();??
  • ??
  • ????????????????if?(popupWindow?!=?null)?{??
  • ????????????????????popupWindow.dismiss();??
  • ????????????????}??
  • ????????????}??
  • ????????});??
  • ????}??
  • }??
  • import java.util.ArrayList; import java.util.List;import cn.com.karl.adapter.GroupAdapter;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.Window; 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 PoupWindowDemoActivity extends Activity {private PopupWindow popupWindow;private ListView lv_group;private View view;private View top_title;private TextView tvtitle;private List<String> groups;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main);top_title = this.findViewById(R.id.top_title);tvtitle = (TextView) top_title.findViewById(R.id.tvtitle);tvtitle.setText("天堂沒有路");tvtitle.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showWindow(v);}});}private void showWindow(View parent) {if (popupWindow == null) {LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);view = layoutInflater.inflate(R.layout.group_list, null);lv_group = (ListView) view.findViewById(R.id.lvGroup);// 加載數據groups = new ArrayList<String>();groups.add("全部");groups.add("我的微博");groups.add("好友");groups.add("親人");groups.add("同學");groups.add("朋友");groups.add("陌生人");GroupAdapter groupAdapter = new GroupAdapter(this, groups);lv_group.setAdapter(groupAdapter);// 創建一個PopuWidow對象popupWindow = new PopupWindow(view, 300, 350);}// 使其聚集popupWindow.setFocusable(true);// 設置允許在外點擊消失popupWindow.setOutsideTouchable(true);// 這個是為了點擊“返回Back”也能使其消失,并且并不會影響你的背景popupWindow.setBackgroundDrawable(new BitmapDrawable());WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);// 顯示的位置為:屏幕的寬度的一半-PopupWindow的高度的一半int xPos = windowManager.getDefaultDisplay().getWidth() / 2- popupWindow.getWidth() / 2;Log.i("coder", "xPos:" + xPos);popupWindow.showAsDropDown(parent, xPos, 0);lv_group.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view,int position, long id) {Toast.makeText(PoupWindowDemoActivity.this,groups.get(position), 1000).show();if (popupWindow != null) {popupWindow.dismiss();}}});} }

    這樣就完成了一個彈出對話框的效果,下面來看一下吧!

    ?

    再看一張新浪微博的彈出對話框效果:

    已經完成,我們可以把這項功能加入自己的做的新浪微博里,為自己的應用增添點特色色彩吧!

    轉載于:https://www.cnblogs.com/leifengcomrade/p/3952404.html

    總結

    以上是生活随笔為你收集整理的android弹出窗口的实现(PopupWindow)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。