`

Android Dialog—列表项带图标的列表对话框

阅读更多
1、将TextView装载到列表项中去就可以实现带图标的列表项,这里需要借助BaseAdapter适配器来实现,然后通过getView将TextView返回就OK。

设置图片资源到TextView需要用到setCompoundDrawable(left,top,right,bottom)此方法,如下:

textView.setCompoundDrawablesWithIntrinsicBounds(imgIds[position], 0, 0, 0); 

imgIds是图片资源数组,即将图片资源设置到TextView的左边(文字在右边,相对位置为文字)

具体设置TextView如下:

TextView textView = 
	new TextView(IconListDialogActivity.this);
//获得array.xml中的数组资源getStringArray返回的是一个String数组
String text = getResources().getStringArray(R.array.hobby)[position];
textView.setText(text);
//设置字体大小
textView.setTextSize(24);
AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
		LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
textView.setLayoutParams(layoutParams);
//设置水平方向上居中
textView.setGravity(android.view.Gravity.CENTER_VERTICAL);
textView.setMinHeight(65);
//设置文字颜色
textView.setTextColor(Color.BLACK);  
//设置图标在文字的左边
textView.setCompoundDrawablesWithIntrinsicBounds(imgIds[position], 0, 0, 0);
//设置textView的左上右下的padding大小
textView.setPadding(15, 0, 15, 0);
//设置文字和图标之间的padding大小
textView.setCompoundDrawablePadding(15);


关于BaseAdapter具体用法和对话框原理,参考spinner下拉列表和普通对话框原理



2、模拟菜单项带图标

对于菜单的子菜单项,无论是上下文菜单ContextMenu还是SubMenu都不支持图片资源,这里针对输入框的上下文菜单的简单模拟(其他类似)。输入框长按将弹出菜单,故需要对输入框长按事件监听,如下

EditText editText = (EditText) findViewById(R.id.editText);  
View.OnLongClickListener editListener =   
    new View.OnLongClickListener() {  
        @Override  
        public boolean onLongClick(View view) {  
            showDialog(ICON_LIST_DIALOG);  
            return true;  
        }  
    };  
editText.setOnLongClickListener(editListener);  


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

实现步骤

第一步:定义res/values/array.xml 用来存放列表项文字内容

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="hobby">
		<item>篮球</item>
		<item>足球</item>
		<item>排球</item>
	</string-array>
</resources>




第二步:接下来还是一个输入框和一个按钮,如下

res/layout/icon_list_dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"  
  android:orientation="vertical"  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content">  
  <EditText android:id="@+id/editText"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="长按输入框将弹出上下文菜单ContextMenu"/>  
  <Button android:id="@+id/button"   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="显示列表对话框 "  
    />  
</LinearLayout>  


第三步:src/com/myiconlistdialog/activity/IconListDialogActivity.java
package com.myiconlistdialog.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class IconListDialogActivity extends Activity {
	
	private int[] imgIds = {R.drawable.basketball, 
			R.drawable.football, R.drawable.volleyball};
	
	private final int ICON_LIST_DIALOG = 1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.icon_list_dialog_layout);
        
        Button button = (Button) findViewById(R.id.button);
        View.OnClickListener btnListener = new View.OnClickListener() {
			
			@Override
			public void onClick(View view) {
				showDialog(ICON_LIST_DIALOG);
			}
		};
		button.setOnClickListener(btnListener);
		
		EditText editText = (EditText) findViewById(R.id.editText);
		View.OnLongClickListener editListener = 
			new View.OnLongClickListener() {
				@Override
				public boolean onLongClick(View view) {
					showDialog(ICON_LIST_DIALOG);
					return true;
				}
			};
		editText.setOnLongClickListener(editListener);
		
    }
    
    
    @Override
    protected Dialog onCreateDialog(int id) {
    	Dialog dialog = null;
    	switch(id) {
    		case ICON_LIST_DIALOG:
    			Builder builder = new AlertDialog.Builder(this);
    			builder.setIcon(R.drawable.basketball);
    			builder.setTitle("体育爱好");
    			BaseAdapter adapter = new ListItemAdapter();
    			DialogInterface.OnClickListener listener = 
    				new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialogInterface, int which) {
							EditText editText = 
								(EditText) findViewById(R.id.editText);
							editText.setText("你选择了: " +getResources()
									.getStringArray(R.array.hobby)[which]);
						}
					};
				builder.setAdapter(adapter, listener);
    			dialog = builder.create();
    			break;
    	}
    	return dialog;
    }
    
    
    class ListItemAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return imgIds.length;
		}

		@Override
		public Object getItem(int position) {
			return null;
		}

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

		@Override
		public View getView(int position, 
				View contentView, ViewGroup parent) {
			TextView textView = 
				new TextView(IconListDialogActivity.this);
			//获得array.xml中的数组资源getStringArray返回的是一个String数组
			String text = getResources().getStringArray(R.array.hobby)[position];
			textView.setText(text);
			//设置字体大小
			textView.setTextSize(24);
			AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
					LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
			textView.setLayoutParams(layoutParams);
			//设置水平方向上居中
			textView.setGravity(android.view.Gravity.CENTER_VERTICAL);
			textView.setMinHeight(65);
			//设置文字颜色
			textView.setTextColor(Color.BLACK);  
			//设置图标在文字的左边
			textView.setCompoundDrawablesWithIntrinsicBounds(imgIds[position], 0, 0, 0);
			//设置textView的左上右下的padding大小
			textView.setPadding(15, 0, 15, 0);
			//设置文字和图标之间的padding大小
			textView.setCompoundDrawablePadding(15);
			return textView;
		}
		
    	
    }
}


目录结构



效果图:




源代码地址:http://download.csdn.net/source/3220141

  • 大小: 47.6 KB
  • 大小: 32.7 KB
分享到:
评论

相关推荐

    16. android dialog列表项带图标的列表对话框模拟菜单项带图标

    16. android dialog ——列表项带图标的列表对话框、模拟菜单项带图标 详情参考: http://blog.csdn.net/jamesliulyc/archive/2011/04/23/6347449.aspx

    AndroidMaterialDialog:提供构建器,允许创建各种“材料设计”样式的对话框

    该库提供以下主要功能: 生成器MaterialDialog.Builder允许创建对话框,其中可以包含标题,图标,消息,最多三个按钮和可选列表项。 通过使用构建器ProgressDialog.Builder ,可以创建显示圆形进度条的对话框。 ...

    适用于Android的材质图标选择器对话框-Android开发

    图标选择器对话框完全可自定义的图标选择器对话框,可以轻松访问高质量的图标,而不必将其单独包含在项目中。 图标捆绑在图标包中,这些图标包作为单独的图标选择器对话框分发。完全可自定义的图标选择器对话框,...

    《Android应用开发揭秘》附带光盘代码.

     4.2.14 带图标的按钮(ImageButton)  4.2.15 拖动效果(Gallery)  4.2.16 切换图片(hmgeSwilcher)  4.2.17 网格视图(GridView)  4.2.18 卷轴视图(ScrollView)  4.2.19 进度条(ProgressBar)  4.2.20 拖动条...

    android开发揭秘PDF

    4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 ...

    《Android应用开发揭秘》源码

     4.2.14 带图标的按钮(ImageButton)  4.2.15 拖动效果(Gallery)  4.2.16 切换图片(hmgeSwilcher)  4.2.17 网格视图(GridView)  4.2.18 卷轴视图(ScrollView)  4.2.19 进度条(ProgressBar)  4.2.20 拖动条...

    Android应用开发揭秘pdf高清版

    4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 ...

    Android高级编程--源代码

    CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Android高级编程》的源代码 对应的书籍资料见: Android高级编程 基本信息 原书名: Professional ...

    android开发使用例子

    对话框(Dialog) 日期(DatePicker) 时间(TimePicker) 单项选择(RadioGroup RadioButton) 图形用户界面 线性布局(LinearLayout) 相对布局(RelativeLayout) 绝对布局(AbsoluteLayout) 表格布局(TableLayout) 数据据存储...

Global site tag (gtag.js) - Google Analytics