Activity像Dialog一样,可以使用主题样式,默认sdk提供一个themedialog, 40开始使用ThemeHoloDialogWhenLarge
在Androidmanifestxml中配置Activity的时候添加@android:style/ThemeHoloDialogWhenLarge:
在计算listview总高度并设置
ListView listView = (ListView) findViewById(id);
YourAdapter adapter = new MyAdapter("初始化你的适配器");
listViewsetAdapter(adapter);
setListViewHeightBasedOnChildren(listView);(在setAdapter后调用自定义的方法)
复制代码代码如下:
/
@param listView
/
private void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listViewgetAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdaptergetCount(); i++) {
View listItem = listAdaptergetView(i, null, listView);
listItemmeasure(0, 0);
totalHeight += listItemgetMeasuredHeight();
}
ViewGroupLayoutParams params = listViewgetLayoutParams();
paramsheight = totalHeight
+ (listViewgetDividerHeight() (listAdaptergetCount() - 1));
listViewsetLayoutParams(params);
}
使用该方法需要注意:子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
关于将这个问题解释为
“
因为Dialog对象没有办法直接获取到一个焦点(Focus),就象你没有办法单击某应用程序标题栏,然后改变他的标题。
需要重写PreTranslateMessage函数,拦截消息,
”
这种说法是对的。但不是返回CView::PreTranslateMessage(pMsg);这样编译器会提示不正确的使用非静态成员变量。因为CView是CWnd的派生类,不能直接返回CView类的成员函数。
所以,要想使你写的ON_WM_CHAR响应函数能够接到按键,应该这样写:
BOOL CMyDialog::PreTranslateMessage(MSG pMsg)
{
if(pMsg-> == WM_CHAR)
CMyDialog::OnChar(pMsg->wParam,0,0);
return CMyDialog::PreTranslateMessage(pMsg);
}
若你的ON_WM_CHAR里写
if(0x == nChar) MessageBox("你按下a键");
程序运行后,当你按下a键,窗口d出消息框 你按下a键。 这也是窗口中过滤一些按键值得常用方法,比如ESC键。
当editText获取焦点的时候,需要直接调用显示键盘命令:
editTextsetOnFocusChangeListener(new ViewOnFocusChangeListener() {@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialoggetWindow()setSoftInputMode(WindowManagerLayoutParamsSOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
d出对话框Dialog解决
你在动作时建一个Dialog 如下:
AlertDialogBuilder dialog=new AlertDialogBuilder(Dialog01Activitythis);
dialogsetTitle("Dialog")setIcon(androidRdrawableic_dialog_info)setMessage("d出框")setPositiveButton("确定", new DialogInterfaceOnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//转跳到另外一个Activity
// TODO Auto-generated method stub
Intent intent=new Intent();
intentsetClass(getApplicationContext(), listclass);
startActivity(intent);
}
})setNegativeButton("取消", new DialogInterfaceOnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialogcancel();//取消d出框
}
})create()show();
你是想跳出dialog的时候,dialog里面的控件就获取焦点呢还是,点击dialog里面的控件获取焦点
点击是自动获取的焦点,你让给他设置相应的点击事件监听
要是点dialog以后就想让dialog里面的控件获取焦点,则要是给自己手动设置
以上就是关于怎么使dialog失去焦点而不消失,activity获得焦点全部的内容,包括:怎么使dialog失去焦点而不消失,activity获得焦点、MFC中ON_CHAR问题。。。、android输入框获取焦点的同时还要d出键盘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)