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

楼主
  发表于 2011-6-16 08:53:43   |  查看: 5520 |  回复: 40
1、将TextView装载到列表项中去就可以实现带图标的列表项,这里需要借助BaseAdapter适配器来实现,然后通过getView将TextView返回就OK。
设置图片资源到TextView需要用到setCompoundDrawable(left,top,right,bottom)此方法,如下:
  1. textView.setCompoundDrawablesWithIntrinsicBounds(imgIds[position], 0, 0, 0);
复制代码
imgIds是图片资源数组,即将图片资源设置到TextView的左边(文字在右边,相对位置为文字)
具体设置TextView如下:
  1. TextView textView = 
  2.         new TextView(IconListDialogActivity.this);
  3. //获得array.xml中的数组资源getStringArray返回的是一个String数组
  4. String text = getResources().getStringArray(R.array.hobby)[position];
  5. textView.setText(text);
  6. //设置字体大小
  7. textView.setTextSize(24);
  8. AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
  9.                 LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
  10. textView.setLayoutParams(layoutParams);
  11. //设置水平方向上居中
  12. textView.setGravity(android.view.Gravity.CENTER_VERTICAL);
  13. textView.setMinHeight(65);
  14. //设置文字颜色
  15. textView.setTextColor(Color.BLACK);  
  16. //设置图标在文字的左边
  17. textView.setCompoundDrawablesWithIntrinsicBounds(imgIds[position], 0, 0, 0);
  18. //设置textView的左上右下的padding大小
  19. textView.setPadding(15, 0, 15, 0);
  20. //设置文字和图标之间的padding大小
  21. textView.setCompoundDrawablePadding(15);
复制代码

关于BaseAdapter具体用法和对话框原理,参考spinner下拉列表和普通对话框原理
2、模拟菜单项带图标
对于菜单的子菜单项,无论是上下文菜单ContextMenu还是SubMenu都不支持图片资源,这里针对输入框的上下文菜单的简单模拟(其他类似)。输入框长按将弹出菜单,故需要对输入框长按事件监听,如下
  1. EditText editText = (EditText) findViewById(R.id.editText);
  2. View.OnLongClickListener editListener = 
  3.         new View.OnLongClickListener() {
  4.                 @Override
  5.                 public boolean onLongClick(View view) {
  6.                         showDialog(ICON_LIST_DIALOG);
  7.                         return true;
  8.                 }
  9.         };
  10. editText.setOnLongClickListener(editListener);
复制代码

---------------------------------------------------------------------------------------------------------
实现步骤
第一步:定义res/values/array.xml 用来存放列表项文字内容
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.         <string-array name="hobby">
  4.                 <item>篮球</item>
  5.                 <item>足球</item>
  6.                 <item>排球</item>
  7.         </string-array>
  8. </resources>
复制代码
第二步:接下来还是一个输入框和一个按钮,如下
res/layout/icon_list_dialog_layout.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.   xmlns:android="http://schemas.android.com/apk/res/android"
  4.   android:orientation="vertical"
  5.   android:layout_width="fill_parent"
  6.   android:layout_height="wrap_content">
  7.   <EditText android:id="@+id/editText"
  8.           android:layout_width="fill_parent"
  9.           android:layout_height="wrap_content"
  10.           android:text="长按输入框将弹出上下文菜单ContextMenu"/>
  11.   <Button android:id="@+id/button" 
  12.           android:layout_width="fill_parent"
  13.           android:layout_height="wrap_content"
  14.           android:text="显示列表对话框 "
  15.           />
  16. </LinearLayout>
复制代码
第三步:src/com/myiconlistdialog/activity/IconListDialogActivity.java
  1. package com.myiconlistdialog.activity;

  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.app.Dialog;
  5. import android.app.AlertDialog.Builder;
  6. import android.content.DialogInterface;
  7. import android.graphics.Color;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.view.ViewGroup.LayoutParams;
  12. import android.widget.AbsListView;
  13. import android.widget.BaseAdapter;
  14. import android.widget.Button;
  15. import android.widget.EditText;
  16. import android.widget.TextView;

  17. public class IconListDialogActivity extends Activity {
  18.         
  19.         private int[] imgIds = {R.drawable.basketball, 
  20.                         R.drawable.football, R.drawable.volleyball};
  21.         
  22.         private final int ICON_LIST_DIALOG = 1;
  23.     @Override
  24.     public void onCreate(Bundle savedInstanceState) {
  25.         super.onCreate(savedInstanceState);
  26.         setContentView(R.layout.icon_list_dialog_layout);
  27.         
  28.         Button button = (Button) findViewById(R.id.button);
  29.         View.OnClickListener btnListener = new View.OnClickListener() {
  30.                         
  31.                         @Override
  32.                         public void onClick(View view) {
  33.                                 showDialog(ICON_LIST_DIALOG);
  34.                         }
  35.                 };
  36.                 button.setOnClickListener(btnListener);
  37.                 
  38.                 EditText editText = (EditText) findViewById(R.id.editText);
  39.                 View.OnLongClickListener editListener = 
  40.                         new View.OnLongClickListener() {
  41.                                 @Override
  42.                                 public boolean onLongClick(View view) {
  43.                                         showDialog(ICON_LIST_DIALOG);
  44.                                         return true;
  45.                                 }
  46.                         };
  47.                 editText.setOnLongClickListener(editListener);
  48.                 
  49.     }
  50.     
  51.     
  52.     @Override
  53.     protected Dialog onCreateDialog(int id) {
  54.             Dialog dialog = null;
  55.             switch(id) {
  56.                     case ICON_LIST_DIALOG:
  57.                             Builder builder = new AlertDialog.Builder(this);
  58.                             builder.setIcon(R.drawable.basketball);
  59.                             builder.setTitle("体育爱好");
  60.                             BaseAdapter adapter = new ListItemAdapter();
  61.                             DialogInterface.OnClickListener listener = 
  62.                                     new DialogInterface.OnClickListener() {
  63.                                                 @Override
  64.                                                 public void onClick(DialogInterface dialogInterface, int which) {
  65.                                                         EditText editText = 
  66.                                                                 (EditText) findViewById(R.id.editText);
  67.                                                         editText.setText("你选择了: " +getResources()
  68.                                                                         .getStringArray(R.array.hobby)[which]);
  69.                                                 }
  70.                                         };
  71.                                 builder.setAdapter(adapter, listener);
  72.                             dialog = builder.create();
  73.                             break;
  74.             }
  75.             return dialog;
  76.     }
  77.     
  78.     
  79.     class ListItemAdapter extends BaseAdapter {

  80.                 @Override
  81.                 public int getCount() {
  82.                         return imgIds.length;
  83.                 }

  84.                 @Override
  85.                 public Object getItem(int position) {
  86.                         return null;
  87.                 }

  88.                 @Override
  89.                 public long getItemId(int position) {
  90.                         return 0;
  91.                 }

  92.                 @Override
  93.                 public View getView(int position, 
  94.                                 View contentView, ViewGroup parent) {
  95.                         TextView textView = 
  96.                                 new TextView(IconListDialogActivity.this);
  97.                         //获得array.xml中的数组资源getStringArray返回的是一个String数组
  98.                         String text = getResources().getStringArray(R.array.hobby)[position];
  99.                         textView.setText(text);
  100.                         //设置字体大小
  101.                         textView.setTextSize(24);
  102.                         AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
  103.                                         LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
  104.                         textView.setLayoutParams(layoutParams);
  105.                         //设置水平方向上居中
  106.                         textView.setGravity(android.view.Gravity.CENTER_VERTICAL);
  107.                         textView.setMinHeight(65);
  108.                         //设置文字颜色
  109.                         textView.setTextColor(Color.BLACK);  
  110.                         //设置图标在文字的左边
  111.                         textView.setCompoundDrawablesWithIntrinsicBounds(imgIds[position], 0, 0, 0);
  112.                         //设置textView的左上右下的padding大小
  113.                         textView.setPadding(15, 0, 15, 0);
  114.                         //设置文字和图标之间的padding大小
  115.                         textView.setCompoundDrawablePadding(15);
  116.                         return textView;
  117.                 }
  118.                 
  119.             
  120.     }
  121. }
复制代码


目录结构
1.gif
效果图:
2.gif        
                 初始状态        
3.gif
           单击按钮或者长按输入框  
  IconListDialogDemo.rar (154.41 KB, 下载次数: 238) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值