自定义控件---系统控件组合式(案例三)

效果图如下

--------------------------------------------------

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"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:hint="请输入文本"
        android:singleLine="true" />

    <ImageView
        android:id="@+id/iv_down_arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/editText1"
        android:layout_alignRight="@+id/editText1"
        android:src="@drawable/down_arrow" />

</RelativeLayout>

popupwindow_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:padding="5dip"
        android:src="@drawable/user" />

    <TextView
        android:id="@+id/tv_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="aaaaaaaa0"
        android:textColor="#000000"
        android:textSize="18sp" />

    <ImageView
        android:id="@+id/iv_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:padding="10dip"
        android:src="@drawable/delete" />

</RelativeLayout>

MainActivity.java

package com.atguigu.downarrow;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

public class MainActivity extends Activity {

	private EditText editText1;
	private ImageView iv_down_arrow;

	private PopupWindow window;

	//自定义listView
	private ListView listView;
	//数据
	private ArrayList<String> msgs;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		editText1 = (EditText) findViewById(R.id.editText1);
		iv_down_arrow = (ImageView) findViewById(R.id.iv_down_arrow);

		//设置点击事件-弹出popuwindow
		iv_down_arrow.setOnClickListener(mClickListener);

		//准备数据
		msgs = new ArrayList<String>();
		for(int i =0;i<200;i++){
			msgs.add("aaaaaaaaaaa"+i);
		}

		//实例化ListView
		listView = new ListView(this);
		//9Patch图片
		listView.setBackgroundResource(R.drawable.listview_background);
		//创建并且设置适配器
		MyAdaper adapter = new MyAdaper();
		listView.setAdapter(adapter);
		//设置点击某一条
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				//1.得到内容
				String msg = msgs.get(position);
				//2.设置到输入框里面
				editText1.setText(msg);
				//如果试图不为空,并且试图处于显示状态
				if(window!= null&&window.isShowing()){
					window.dismiss();
					//释放资源
					window = null;
				}
			}
		});

	}
	private OnClickListener mClickListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.iv_down_arrow://向下箭头

				if(window == null){
					window = new PopupWindow(MainActivity.this);
					window.setWidth(editText1.getWidth());
					window.setHeight(200);
					//TODO ListView还没有创建,一会要来继续接着这个地方写代码
					window.setContentView(listView);
					//设置焦点
					window.setFocusable(true);

				}

				window.showAsDropDown(editText1, 0, 0);

				break;

			default:
				break;
			}

		}
	};

	/**
	 * 创建适配器
	 */
	class MyAdaper extends BaseAdapter{

		@Override
		public int getCount() {
			return msgs.size();
		}

		@Override
		public Object getItem(int position) {
			return msgs.get(position);
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			//最终返回一个view
			View view;
			ViewHolder holder;
			if(convertView != null){
				view = convertView;
				holder = (ViewHolder) view.getTag();
			}else{
				//把布局文件--->View对象
				view = View.inflate(MainActivity.this, R.layout.popupwindow_item, null);
				holder = new ViewHolder();
				holder.tv_msg = (TextView) view.findViewById(R.id.tv_msg);
				holder.iv_delete = (ImageView) view.findViewById(R.id.iv_delete);

				//关联起来
				view.setTag(holder);
			}

			//根据位置得到对应的数据
			final String msg = msgs.get(position);
			holder.tv_msg.setText(msg);

			holder.iv_delete.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					//1.从列表中清除
					msgs.remove(msg);

					//2.刷新显示
					notifyDataSetChanged();

				}
			});

			return view;
		}

	}

	static class ViewHolder{
		TextView tv_msg;
		ImageView iv_delete;
	}
}
时间: 2024-10-12 17:14:33

自定义控件---系统控件组合式(案例三)的相关文章

自定义控件---系统控件组合式(案例二)

-----------------------------------------------案例效果------------------------------------- activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout

自定义控件---系统控件组合式(案例一)

-----------------------------案例一---------------动画效果不截图了------------------------------------- activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:la

【读书笔记-《Android游戏编程之从零开始》】8.Android 游戏开发常用的系统控件(系统控件常见问题)

Android 中常用的计量单位Android有时候需要一些计量单位,比如在布局Layout文件中可能需要指定具体单位等.常用的计量单位有:px.dip(dp).sp,以及一些不常用的pt.in.mm.下面详细介绍下这些计量单位之间的区别和联系.in:英寸(长度单位):mm:毫米(长度单位):pt:磅/点,1/72英寸(一个标准的长度单位):sp:全名 scaled pixels-best for text size,放大像素,与刻度无关,可以根据用户的字体大小就行缩放,主要用来处理字体的大小:

【读书笔记-《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)

3.7 ProgressBar ProgressBar类官方文档地址:http://developer.android.com/reference/android/widget/ProgressBar.html 在Android应用开发中,ProgressBar(运行进度条)是比较常用到的组件,例如下载进度.安装程序进度.加载资源进度显示等.在Android中提供了两种样式来分别表示在不同状态下显示的进度条,下面来实现这两种样式.默认进度条是圆形,通过style属性来指定系统进度条的大小:sty

【读书笔记-《Android游戏编程之从零开始》】4.Android 游戏开发常用的系统控件(EditText、CheckBox、Radiobutton)

3.4 EditText EditText类官方文档地址:http://developer.android.com/reference/android/widget/EditText.html EditText继承TextView,所以EditText具有TextView的属性特点,下面主要介绍一些EditText的特有的输入法的属性特点android:layout_gravity="center_vertical":设置控件显示的位置:默认top,这里居中显示,还有bottomand

【读书笔记-《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)

3.9 TabSpec与TabHost TabHost类官方文档地址:http://developer.android.com/reference/android/widget/TabHost.html Android 实现tab视图有2种方法,一种是在布局页面中定义<tabhost>标签,另一种就是继承tabactivity.但是我比较喜欢第二种方式,应为如果页面比较复杂的话你的XML文件会写得比较庞大,用第二种方式XML页面相对要简洁得多. <?xml version="1

VC控件自绘制三步曲

http://blog.csdn.net/lijie45655/article/details/6362441 实现自定义绘制的三步曲 既然您已经了解了绘制控件可用的各种选项(包括使用自定义绘制的好处),那么,让我们来看看实现一个自定义绘制控件需要的三个主要步骤. 执行一个 NM_CUSTOMDRAW 消息处理程序. 指定处理所需的绘制阶段. 筛选特定的绘制阶段(在这些阶段中,您需要加入自己的特定于控件的绘制代码). 执行一个NM_CUSTOMDRAW 消息处理程序 当需要绘制一个公共控件时,M

【读书笔记-《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)

3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里的name是自定义的,不是索引变量."@+"表示新声明,"@"表示引用,例如:"@+id/tv" 表示新声明一个id,是id名为tv的组件:"@id/tv" 表示引用id名为tv的组件. 给按钮添加点击事件响应  想知道按钮是否被

Android调用相册拍照控件实现系统控件缩放切割图片

android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.ByteArrayOutputStream;import java.io.File;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Ur