怎么使dialog失去焦点而不消失,activity获得焦点

怎么使dialog失去焦点而不消失,activity获得焦点,第1张

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出键盘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9455300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存