我们正在开发我们的第一个Android应用程序,到目前为止它是一个非常愉快的体验.它几乎完成,但在发布之前我们有一些考虑因素,主要是关于android软键盘.
我们有几个用于输入数字的 EditText字段.我们希望在用户按下Enter键时捕获事件,并进行一些计算并保存此回调.
问题是我们没有得到固定的事件,因为不同的手机有不同的键盘.有些人有"完成"按钮,我们的HTC手机有"进入"按钮.我们尝试将imeOptions用作'完成',但这对HTC手机没有影响.
我们也知道可以通过按下后退按钮来解除键盘.所以我的问题是,是否有一种可靠的方法可以知道用户何时停止输入或何时隐藏键盘,就像在iphone sdk中的textFieldShouldReturn回调一样(当键盘发生故障时它总是会触发,而不管是什么键导致它去了下)..
换句话说,Android开发人员如何处理软键盘?我在editText onClick()事件上检查KeyEvent.KEYCODE_ENTER并在那里完成我的任务.它正在我的HTC android上工作,但不是我的朋友Nexus手机,它有一个完成按钮而不是输入.甚至没有调用onClick.开发人员如何处理此问题?
编辑:失去了一半的头发,并在这里的一些好朋友的帮助下
我已经尝试了所有的建议,但最后通过使用onEditorActionListener和onKeyListener方法为我做了诀窍.在OnEditorActionListener的onEdit回调中,我检查了KeyCode ACTION_DONE,它确实在带有完成按钮的键盘上调用.在输入onKey的键盘上被调用.在onKey方法中我也检查了KEYCODE_BACK,因此也可以处理硬件反压事件.我还没有找到一个完成的Android设备并且在键盘上输入(严重),我甚至用标志处理了这个案例.感谢@Femi建议onEditorActionListener,感谢所有朋友的帮助.但是我原来问题的答案
问:有没有一种可靠而简单的方法来了解android软键盘辞职(适用于每部手机的回调)
答:不,这里建议的所有方法和其他网站上建议的所有方法都不简单.我认为处理键盘返回键事件是任何操作系统最基本的事情.谷歌,你呢?
我有一个背景颜色为灰色的UILabel.
我希望这个标签上有一个闪烁的效果,就像它应该变成一点白色然后变成灰色,它应该一直发生,直到我以编程方式关闭它.
任何线索如何实现这一目标?
我正在开发一款iphone应用,目标是iOS 4.0或更高版本.我正在尝试向UIImageView添加图像,图像采用jpeg格式.这就是我到目前为止所做的......
UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)];
bgImageView.image = [UIImage imageNamed:@"background"];
[self.view addSubview:bgImageView];
[bgImageView release];
Run Code Online (Sandbox Code Playgroud)
我添加了两张图片,
但是当我构建并运行时,一切都运行良好,除了没有背景.我的所有其他小工具都在那里,但是有一个白色背景,图像没有显示.
接下来,我为我的背景创建了两个png图像,将其添加到项目中并运行.这次是我的背景.我很困惑,因为根据文档 jpg图像可以在UIImage的iphone中使用.
我再次尝试使用我的jpg图像并将上面的代码更改为此
UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)];
bgImageView.image = [UIImage imageNamed:@"background.jpg"]; //added extension
[self.view addSubview:bgImageView];
[bgImageView release];
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,显示背景图像,但未加载2x图像.这表明我的jpg图像很好,并不是罪魁祸首.因此,当我只提供没有扩展名的图像名称时,png文件(包括1x和2x)都加载到各自的设备上,jpg文件根本没有加载.看起来像一个错误(在sdk或文档中).iOS 4在这里度过了美好的一年.为什么没有人注意到它?除了将我的所有图像转换为png之外,还有什么选择吗?
编辑:
那么,两天的问题,零回答.我已经将所有图像转换为png,并且我的项目的那部分已经完成(因为我的项目无法等待......).尽管如此,为了我自己和为了将来面对这一切的每个人,我想更多地了解这个问题.至少有人可以确认这确实是一个苹果虫.我正在开始赏金,以便更多人可以看到这个帖子.
再次编辑
此奖金剩余2天结束.感谢所有回复的人.但让我澄清一件事.我已经说过我已将所有图像转换为png而且我一直在移动.我只是想要一些确认,以imageNamed
同样的方式处理jpg和png文件.文档肯定会说(除非Apple将其写入UIImage
文档以外的其他地方).如果文档是正确的,那么由于两个可能的原因我的代码失败了
imageNamed
.如果这是原因,那么我没有太多的选择,除了提交错误报告,将我的图像更改为png或写一个包装(就像Chandan在他的回答中所说)并继续前进..还有一件事.这篇文章也只是讲述了这个问题.但他不知道背后的原因.所以我并不孤单.
编辑:结束
嗯它是与图像本身有关的东西.我用Google搜索并下载了一些示例jpeg图像并使用它进行播放.其中一些显示正确,一些没有.由于限制时间到了,我正在向PengOne提供限制,他试图重现错误并成功加载jpg图像而没有扩展,让我使用更多图像.感谢所有试图提供帮助的人.
我在这个网站上看到多个线程讨论在android中发送带附件的电子邮件.我想讨论的每一个方法在这里,这里和这里.
我正在通过代码创建一个csv文件并将此文件保存到android内部存储.然后我想在电子邮件中将此文件作为附件发送.嗯,电子邮件正在发送,我收到它没有附件.这就是我所做的.
String columnString = "\"Person\",\"Gender\",\"Street1\",\"PostOfice\",\"Age\"";
String dataString = "\"" + currentUser.userName +"\",\"" + currentUser.gender + "\",\"" + currentUser.street1 + "\",\"" + currentUser.poNumber.toString() + "\",\"" + currentUser.age.toString() + "\"";
String combinedString = columnString + "\n" + dataString;
File file = new File(this.getCacheDir()+ File.separator + "Data.csv");
try {
FileOutputStream out = new FileOutputStream(file);
out.write(combinedString.getBytes());
out.close();
} catch (IOException e) {
Log.e("BROKEN", "Could not write file " + e.getMessage());
}
Uri u1 = Uri.fromFile(file);
Intent sendIntent …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android应用程序.我有一个活动,比如A,它用整个屏幕填充视图.在AI中按下一个按钮想要开始另一个活动,比如B,它也有一些视图和控件.我希望活动B在屏幕外,并希望从A获取B的屏幕截图.可能吗?
注意:我通过将绘图缓存保存到位图中来成功获取页面A的屏幕截图,但很难获取屏幕外页面的屏幕截图.
我正在尝试找到本地化我的应用程序的最简单方法.我正在使用sqlite,所以我基本上只需要切换我的数据库名称.问题是应用程序名称 - 它是否可以从代码本地化,或者我必须为x语言制作x应用程序,因此任何人都将使用他/她的母语应用程序名称?后者似乎已经拒绝了app给我......有人吗?
我正处于一个Android项目的中间,并试图在其中创建一个新的包.
com.mycompany.myprojectname.new
Run Code Online (Sandbox Code Playgroud)
好吧,Eclipse不允许我创建它并显示此错误:
包名称无效.'new'不是有效的Java标识符
我从来不知道包名有保留字,我们无法使用.我的问题是;
我正在开发一个Android应用程序,我有一个EditText,用户可以输入数字.我想使用不同的货币格式(比如##,##,###)来格式化数字,我想在运行中进行,即当用户输入每个数字时(而不是按下输入时).我google了一下,遇到了TextWatcher,我首先发现它很有希望,但结果却是一种绝对的痛苦.我正在HTC Desire手机上调试我的代码,它只有一个软键盘.
现在我想在用户按下数字(0到9),del(退格)键并输入密钥时收到回调.从我的测试中我发现了这些(至少在我的手机上)
1)当用户按del或输入键时,将调用editText onKeyListener.当用户按下回车键时,一次输入会调用onKey函数两次(我认为是ACTION_UP和ACTION_DOWN).当用户按下del时,onKey被调用一次(仅适用于ACTION_DOWN),我不知道为什么.用户按下任何数字(0到9)时都不会调用onKey,我也无法理解.
2)每当用户按任意数字(0到9)键时,都会调用TextWatchers 3个回调函数(beforeTextChanged,onTextChanged,afterTextChanged).所以我想通过一起使用TextWatcher和onKeyListener,我可以得到我需要的所有回调.
现在我的问题是这些......
1)首先在我的HTC软键盘上有一个键(带有向下箭头的键盘符号),当我点击它时键盘被重新签名而不给出任何回调.我仍然不能相信Android让用户编辑一个字段并辞职而不让程序处理(保存)编辑.现在我的editText显示一个值,我的对象有另一个值(我在输入时保存用户编辑,并通过使用对象中的值重置editText值来处理键盘按键,但我没有回答此键盘向下键) .
2)其次,我想在用户输入新数字后格式化数字.假设我在editText上已有123并且用户输入了按4,我希望我的editText显示1,234.我得到onTextChanged()和afterTextChanged()的完整数字,我可以格式化数字并将其放回到任何这些回调中的editText.我应该使用哪一个?哪种是最佳做法?
3)第三个是最关键的问题.当应用程序启动时,我将当前对象值放在editText中.假设我把123放在onResume()上,当用户输入一个数字(比如说4)时,我希望它是1234.但是在我的onTextChanged回调中我得到的是4123.当我再按一个键(比如5)我是得到45123.因此对于用户输入,editText光标指向文本的结尾.但是当手动设置值时,editText光标似乎不会更新.我相信我必须在textWatcher回调中做一些事情,但我不知道该怎么办.
我在下面发布我的代码.
public class AppHome extends AppBaseActivity {
private EditText ed = null;
private NumberFormat amountFormatter = null;
private boolean isUserInput = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_home_screen);
ed = (EditText)findViewById(R.id.main_amount_textfield);
amountFormatter = new DecimalFormat("##,##,###");
ed.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN)
return true;
String strippedAmount = ed.getText().toString().replace(",", "");
if(keyCode == KeyEvent.KEYCODE_DEL){
//delete pressed, strip …
Run Code Online (Sandbox Code Playgroud) 好吧,我熟悉c,iOS环境下的套接字编程.但现在尝试通过套接字连接我的android和我的远程服务器......作为一个启动,我在C中编写了一个简单的服务器程序并在我的桌面上运行它耐心地等待连接请求,接受连接,然后等待一些请求字符串,并在获取请求字符串时返回一些响应字符串,然后再次等待下一个请求并继续...好了,你明白了...
至今
这是我的客户端代码..
public class SocketMaster {
private Socket clientSocket = null;
BufferedReader socketReadStream = null;
public boolean connectToHost(String ip, int port){
try {
InetAddress serverAddr = InetAddress.getByName(ip);
try {
clientSocket = new Socket(serverAddr, port);
socketReadStream = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String line = null;
String stringToSend = "This is from client ...Are you there???";
//Write to server..stringToSend is the request string..
this.writeToServer(stringToSend);
//Now read the response..
while((line = socketReadStream.readLine()) != null){
Log.d("Message", line);
}
} catch (IOException e) …
Run Code Online (Sandbox Code Playgroud) android ×6
ios ×4
iphone ×2
asynchronous ×1
attachment ×1
callback ×1
cocoa-touch ×1
csv ×1
eclipse ×1
email ×1
enter ×1
events ×1
export ×1
formatter ×1
graph ×1
java ×1
jpeg ×1
listener ×1
localization ×1
objective-c ×1
off-screen ×1
package ×1
png ×1
screenshot ×1
sockets ×1
textwatcher ×1
uiimage ×1
uilabel ×1
uiview ×1
xcode ×1