Android keyboard菜单实现

来源:互联网 发布:bs公式 知乎 编辑:程序博客网 时间:2024/05/22 02:24


先上个效果图:


步骤大体如下:


1、定义xml,就是一个gridview

<?xml version="1.0" encoding="utf-8"?><GridView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/gridview"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_alignParentBottom="true"    android:background="@color/gray_bg"    android:clickable="false"    android:descendantFocusability="blocksDescendants"    android:horizontalSpacing="1dp"    android:numColumns="6"    android:verticalSpacing="1dp" ></GridView>


2、自定义菜单view,继承自dialog

import android.app.Dialog;import android.content.Context;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.view.Window;import android.view.WindowManager;import android.widget.GridView;import com.hytech.jy.qiche.R;import com.hytech.jy.qiche.adapter.KeyboardAdapter;import com.hytech.jy.qiche.interfaces.KeyboardListener;/** * 自定义dialog * @author ml * */public class CustomDialog extends Dialog {public CustomDialog(Context context) {super(context);}public CustomDialog(Context context, int theme) {super(context, theme);}public static class Builder {private Context context;private CustomDialog dialog;private GridView mGridView;private KeyboardAdapter mAdapter;private KeyboardListener mKeyboardListener;        private String []letters;    public Builder(Context context) {    this.context = context;    }public Builder setMessage(String []data) {this.letters = data;return this;}public Builder setKeyboardListener(KeyboardListener listener){this.mKeyboardListener = listener;return this;}public CustomDialog createDialog() {LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// instantiate the dialog with the custom Themedialog = new CustomDialog(context, R.style.myDialog);View view = inflater.inflate(R.layout.dialog_keyboards, null);mGridView = (GridView) view.findViewById(R.id.gridview);mAdapter = new KeyboardAdapter(context, letters, mKeyboardListener);mGridView.setAdapter(mAdapter);dialog.addContentView(view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));//dialog.setContentView(view);//获得当前窗体Window window = dialog.getWindow();//重新设置WindowManager.LayoutParams lp = window.getAttributes();window.setGravity(Gravity.BOTTOM|Gravity.FILL_HORIZONTAL);lp.x = 0;lp.y = 0;window.setAttributes(lp);return dialog;}}}

3、实现数据适配器

import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.hytech.jy.qiche.R;import com.hytech.jy.qiche.interfaces.KeyboardListener;public class KeyboardAdapter extends BaseAdapter{private Context mContext;private String[] contentStrings;private int id;private KeyboardListener mKeyboardListener;public KeyboardAdapter(Context context, String[] contents, KeyboardListener listener) {this.mContext = context;this.contentStrings = contents;this.mKeyboardListener = listener;}@Overridepublic int getCount() {return contentStrings.length;}@Overridepublic Object getItem(int position) {return contentStrings[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {Holder mHolder = null;if (convertView == null) {mHolder = new Holder();convertView = LayoutInflater.from(mContext).inflate(R.layout.item_keyboards, null);mHolder.mTextView = (TextView) convertView.findViewById(R.id.text);convertView.setTag(mHolder);} else {mHolder = (Holder) convertView.getTag();}mHolder.mTextView.setText(contentStrings[position]);mHolder.mTextView.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){if (mKeyboardListener != null) {mKeyboardListener.getContent(contentStrings[position]);}}});return convertView;}public static class Holder {TextView mTextView;}}

4、调用菜单

注:为了视觉效果,最好讲菜单内容填充完整,比如gridview有6行,菜单内容最好是6的倍数

        String[] letterStrings = getResources().getStringArray(R.array.letters);        letterDialog = new CustomDialog.Builder(context).setMessage(letterStrings)                .setKeyboardListener(new KeyboardListener() {                    @Override                    public void getContent(String info) {                        if(!TextUtils.isEmpty(info)) {                            letter = info;                            letterSpinner.setText(letter);                            letterDialog.dismiss();                        }                    }                })                .createDialog();        letterDialog.show();


1 0
原创粉丝点击