понедельник, января 14, 2013

Galaxy Note 2, usability и стилус

Забавный usability баг с Galaxy Note 2: при помощи стилуса можно выполнять почти все виды взаимодействия с экраном... за исключением нажатия на аппаратную кнопку "Назад" :)

А так как кнопка эта используется очень часто, то возникает некий дискомфорт - (1) нажимаешь, на автомате, стилусом на Back, (2) соображаешь, что эта кнопка нажатия стилуса не обрабатывает, (3) вынимаешь стилус из пальцев и нажимаешь на кнопку уже пальцем.

How to send a toast message from a thread or a service


Sometimes I need to show a toast message from some service or from a thread.
I make it so:

1. add private handler and public method into my Application class:
public class MyApplication extends Application {
    ...

private static Handler toastHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
String message = msg.getData().getString("message");
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
};

public static void showToast(String messageText) {
Message message = Message.obtain();
Bundle data = new Bundle();
data.putString("message", messageText);
message.setData(data);

toastHandler.sendMessage(message);
}
}

2. call my method from anywhere
public class MyService extends IntentService {
...
private void doSomething() {
...
MyApplication.showToast("Something is done");
}
}

среда, января 09, 2013

Как установить произвольный формат даты-времени при использовани JAXB

Аннотируем пакет, в котором размещаются отображаемые классы: создаём package-info.java с таким содержимым:


@XmlJavaTypeAdapter(value=DateFormatterAdapter.class,type=Date.class)
package messagesendapp.domain;

import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

Создаём сам адаптер:


public class DateFormatterAdapter extends XmlAdapter {
    
    private SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss Z");

    @Override
    public Date unmarshal(String v) throws Exception {
        return sdf.parse(v);
    }

    @Override
    public String marshal(Date v) throws Exception {
        return sdf.format(v);
    }    
}

Готово.