宣传部活动后期做什么:Android界面的几个问题
来源:百度文库 编辑:中财网 时间:2024/04/29 07:35:40
一、findViewByid 与 setContendView
1、Android界面的各个子元素,似乎应该在主Layout显示之后创建才可以。
例如:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tedit = (EditText)findViewById(R.id.EditText01);
}
public void onResume(){
super.onResume();
tedit.setText("abvcd");
}
上面代码运行正常。而如果,将其修改为如下,则运行就会出错。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tedit = (EditText)findViewById(R.id.EditText01);
setContentView(R.layout.main);
}
public void onResume(){
super.onResume();
tedit.setText("abvcd");
}
而且,即使系统中没有onResume函数,改成如下实现,在单击button时,仍然会提示出错:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tedit = (EditText)findViewById(R.id.EditText01);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tedit.setText("abvcd");
}
});
}
这说明,一定不是因为onCreate与onResume之间时间过短资源未准备好而导致的,而从源码和原理上来说,也应该时间间隔过短资源未准备好没什么关系。个人理解,findViewById,是按照id去获取view,则应该在view加载之后才可以。而 setContentView(R.layout.main)应该就是用来加载显示各个layout.main中的各个view控件的。所以本例中,findViewById应该在 setContentView 之后。事实上,将上面代码改成如下,进行测试之后,发现logcat果然有错误显示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tedit = (EditText)findViewById(R.id.EditText01);
if(null == tedit )
{
Log.e("Error","tedit is not found");
}
setContentView(R.layout.main);
}
二、关于Activity启动时自动显示软键盘
【手记】
1、据资料说,edit获得焦点时,会自动弹出相应的输入法软键盘。于是,在xml文件中,对EditText控件设置属性,设定输入法,并使其默认获得焦点( 即设置获得焦点):
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode = "true"
android:inputType="textUri|number">
然而,经试验发现不可以。于是,准备在Activity的onResume事件中通过代码为EditText设置焦点,之所以在onResume事件而不在onCreate事件中设置,是因为onCreate事件发生时,控件还不能进行相应操作。代码如下:
public void onResume(){
super.onResume();
tedit.requestFocus();
}
经过试验,发现上面的操作也并不能显示软键盘。于是... ...
2、直接执行显示软键盘的代码,如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tedit = (EditText)findViewById(R.id.EditText01);
if(null == tedit )
{
Log.e("out","tedit is not found");
}
focusChangeListener = new OnFocusChangeListener()
{
@Override
public void onFocusChange(View arg0, boolean arg1) {
// TODO Auto-generated method stub
if(tedit == arg0)
{
if(arg1)
{
//tedit.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(tedit,0);
}
}
}
};
tedit.setOnFocusChangeListener(focusChangeListener);
}
public void onResume(){
super.onResume();
tedit.requestFocus();
//tedit.setInputType( InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_URI);//设置输入法格式,可以不要
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(tedit,0); //显示输入法
tedit.performClick(); //代码执行Click事件
}
经过验证,发现这样也并不能将软键盘显示出来。于是重新搜索,发现网上有一个方法,可以利用timer来实现该效果。
3、利用timer变通实现自动弹出软键盘
原理是在onCreate实践中,起一个timer进行计时,在时间到时的回调函数中,执行软键盘显示代码。如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tedit = (EditText)findViewById(R.id.EditText01);
if(null == tedit )
{
Log.e("out","tedit is not found");
}
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
InputMethodManager imm =
(InputMethodManager)tedit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
//Toast.makeText(GuiTest.this, "show", Toast.LENGTH_SHORT).show();//GuiTest是Activity类名,这句不需要
}
}, 1000);
}
经试验,这样确实能实现软键盘自动弹出。注意,1000为延时值,不可太短,否则仍然谈不出来,也不可太长,否则activity启动半天之后才弹出,则失去意义了。
另外,起timer也可以在onResume事件中完成。
参考资料:
1、http://blog.sina.com.cn/s/blog_4e5143100100i196.html?retcode=0
//隐藏软键盘
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
//显示软键盘,控件ID可以是EditText,TextView,android 1.6的SDK本身有问题,无法设置manifest文件或者直接show出软键盘,preformclick也不行,必须手动click一个控件
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控件ID, 0);
//InputMethodManager im =(InputMethodManager)
edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
2、http://tech.cncms.com/shouji/android/41261.html
1、Android界面的各个子元素,似乎应该在主Layout显示之后创建才可以。
例如:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tedit = (EditText)findViewById(R.id.EditText01);
}
public void onResume(){
super.onResume();
tedit.setText("abvcd");
}
上面代码运行正常。而如果,将其修改为如下,则运行就会出错。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tedit = (EditText)findViewById(R.id.EditText01);
setContentView(R.layout.main);
}
public void onResume(){
super.onResume();
tedit.setText("abvcd");
}
而且,即使系统中没有onResume函数,改成如下实现,在单击button时,仍然会提示出错:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tedit = (EditText)findViewById(R.id.EditText01);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tedit.setText("abvcd");
}
});
}
这说明,一定不是因为onCreate与onResume之间时间过短资源未准备好而导致的,而从源码和原理上来说,也应该时间间隔过短资源未准备好没什么关系。个人理解,findViewById,是按照id去获取view,则应该在view加载之后才可以。而 setContentView(R.layout.main)应该就是用来加载显示各个layout.main中的各个view控件的。所以本例中,findViewById应该在 setContentView 之后。事实上,将上面代码改成如下,进行测试之后,发现logcat果然有错误显示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tedit = (EditText)findViewById(R.id.EditText01);
if(null == tedit )
{
Log.e("Error","tedit is not found");
}
setContentView(R.layout.main);
}
二、关于Activity启动时自动显示软键盘
【手记】
1、据资料说,edit获得焦点时,会自动弹出相应的输入法软键盘。于是,在xml文件中,对EditText控件设置属性,设定输入法,并使其默认获得焦点(
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode = "true"
android:inputType="textUri|number">
然而,经试验发现不可以。于是,准备在Activity的onResume事件中通过代码为EditText设置焦点,之所以在onResume事件而不在onCreate事件中设置,是因为onCreate事件发生时,控件还不能进行相应操作。代码如下:
public void onResume(){
super.onResume();
tedit.requestFocus();
}
经过试验,发现上面的操作也并不能显示软键盘。于是... ...
2、直接执行显示软键盘的代码,如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tedit = (EditText)findViewById(R.id.EditText01);
if(null == tedit )
{
Log.e("out","tedit is not found");
}
focusChangeListener = new OnFocusChangeListener()
{
@Override
public void onFocusChange(View arg0, boolean arg1) {
// TODO Auto-generated method stub
if(tedit == arg0)
{
if(arg1)
{
//tedit.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(tedit,0);
}
}
}
};
tedit.setOnFocusChangeListener(focusChangeListener);
}
public void onResume(){
super.onResume();
tedit.requestFocus();
//tedit.setInputType( InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_URI);//设置输入法格式,可以不要
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(tedit,0); //显示输入法
tedit.performClick(); //代码执行Click事件
}
经过验证,发现这样也并不能将软键盘显示出来。于是重新搜索,发现网上有一个方法,可以利用timer来实现该效果。
3、利用timer变通实现自动弹出软键盘
原理是在onCreate实践中,起一个timer进行计时,在时间到时的回调函数中,执行软键盘显示代码。如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tedit = (EditText)findViewById(R.id.EditText01);
if(null == tedit )
{
Log.e("out","tedit is not found");
}
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
InputMethodManager imm =
(InputMethodManager)tedit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
//Toast.makeText(GuiTest.this, "show", Toast.LENGTH_SHORT).show();//GuiTest是Activity类名,这句不需要
}
}, 1000);
}
经试验,这样确实能实现软键盘自动弹出。注意,1000为延时值,不可太短,否则仍然谈不出来,也不可太长,否则activity启动半天之后才弹出,则失去意义了。
另外,起timer也可以在onResume事件中完成。
参考资料:
1、http://blog.sina.com.cn/s/blog_4e5143100100i196.html?retcode=0
//隐藏软键盘
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
//显示软键盘,控件ID可以是EditText,TextView,android 1.6的SDK本身有问题,无法设置manifest文件或者直接show出软键盘,preformclick也不行,必须手动click一个控件
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控件ID, 0);
//InputMethodManager im =(InputMethodManager)
edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
2、http://tech.cncms.com/shouji/android/41261.html
android 界面加载后弹出软键盘
核心提示:在onCreate函数中设定一个定时器,延迟一定时间,android 界面加载后弹出软键盘,弹出软键盘,不能弹出软键盘的主要原因是在onCreate函数中Android程序未将屏幕绘制完成在onCreate函数中设定一个定时器,延迟一定时间,弹出软键盘。
不能弹出软键盘的主要原因是在onCreate函数中Android程序未将屏幕绘制完成。
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run() {
InputMethodManager imm =(InputMethodManager)vv.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
Toast.makeText(test.this, "show", Toast.LENGTH_SHORT).show();
}
}, 1000);
radiohead 的 Paranoid Android 中文翻译
acid android的menbers除了yuki外谁可以给我介绍一下?
哪里可以下到acid android的歌恳求拜托了我要疯了!!!!
paranoid android中文歌词
关于 PROTELL99 的几个问题
关于“蚁后”的几个问题
关于狗的几个问题
关于新仙剑的几个问题
有关CBD的几个问题
IPOD的几个问题
关于翻录的几个问题~@~
关于小孩子的几个问题??
关于PHOTOSHOP的几个问题
《《《关于火车票的几个问题》》》》~~~~~~~~
《《《关于火车票的几个问题》》》》
《《《关于火车票的几个问题》》》》???????
电脑白痴的几个问题
关于QQ的几个问题
关于计算机网络的几个问题
关于powerpoint的几个问题
有关电脑的几个问题:
关于苹果的几个问题?
乐毅的几个问题
有关《水浒传》的几个问题