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
- Android keyboard菜单实现
- android keyboard
- Android实现自定义菜单
- android菜单的实现
- Android 上下文菜单实现
- Android 上下文菜单实现
- android 实现下拉菜单
- Android 多级菜单实现
- android底部菜单实现
- Android顶部菜单实现
- android筛选菜单实现
- android 二级菜单实现
- Android 上下文菜单实现
- 【Android】菜单功能的实现:上下文菜单
- Android菜单optionMenu(选择菜单)的实现
- Android Keyboard 解析过程
- Android EditText/Keyboard
- Android实现矩形设置菜单
- 谷安学习google及shodan搜索小谈
- java集合遍历
- 编程小练习
- 第八周 项目二
- 指针
- Android keyboard菜单实现
- Freemarker标签示例
- 第九周项目2深复制体验(2)
- 指向学生类的指针
- 美国一半程序员非科班出身,他们是怎么做到的
- 第九周项目一深复制体验(2)
- 会引起全表扫描的几种SQL
- SlidingMenu--导入开源库及简单使用
- 编程小练习