вторник, 31 января 2012 г.

Android: скрываем адресную строку у WebView

По умолчанию у WebView всегда присутствует адресная строка. Для того чтоб убрать её нужно так же, как и при перехвате ошибки загрузки страницы, заменить WebViewClientна свой.

private class MyWebViewClient extends WebViewClient {
     
        /** Remove address bar  */
        @Override
        public boolean shouldOverrideUrlLoading( WebView view, String url ) {
            view.loadUrl(url);
            return true;
        }
}

Использование:
this.webView.setWebViewClient( new MyWebViewClient() );

воскресенье, 29 января 2012 г.

Визуальное представление SQL запросов с JOIN

Использование JOIN в SQL запросах гораздо проще понять если отобразить их в диаграммах Эйлера-Венна. Когда я изучал SQL мне попались только англоязычные материалы. Ligaya Turmelle и Jeff Atwood. Надеюсь этот материал поможет русскоязычным коллегам.

Для экспериментов используется две таблицы.
Таблица А:
create table `tableA` ( `id` int, `name` varchar(30) );
insert into `tableA` ( `id`, `name` ) values ( 1, 'Pirate' ), ( 2, 'Monkey' ), ( 3, 'Ninja' ), ( 4, 'Spaghetti' );
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | Pirate    |
|    2 | Monkey    |
|    3 | Ninja     |
|    4 | Spaghetti |
+------+-----------+

Таблица B:
create table `tableB` ( `id` int, `name` varchar(30) );
insert into `tableB` ( `id`, `name` ) values ( 1, 'Rutabaga' ), ( 2, 'Pirate' ), ( 3, 'Darth Vader' ), ( 4, 'Ninja' );
+------+-------------+
| id   | name        |
+------+-------------+
|    1 | Rutabaga    |
|    2 | Pirate      |
|    3 | Darth Vader |
|    4 | Ninja       |
+------+-------------+


1. INNER JOIN

select * from tableA inner join tableB on tableA.name = tableB.name;
+------+--------+------+--------+
| id   | name   | id   | name   |
+------+--------+------+--------+
|    1 | Pirate |    2 | Pirate |
|    3 | Ninja  |    4 | Ninja  |
+------+--------+------+--------+

Выбираются строки из таблицы A и B, в которых есть одинаковые ключевые значения и в таблице A и в таблице B.

Media Queries для определения iOS устройства

Используя Media queries по размеру экрана можно определить на какое iOS устройство загружена страница.

/* Desktop large × large */

@media all and (min-device-width: 1025px){
  body:before{ content:"Desktop"; }
}

/* iPad 1024 × 768 */

@media all and (max-device-width:1024px) and (min-device-width:481px) and (orientation:landscape){
  .ipad:before{ content:"iPad landscape"; }
}

@media all and (max-device-width:768px) and (min-device-width:321px) and (orientation:portrait){
  .ipad:after{ content:"iPad portrait"; }
}
  
/* iPhone retina 640 × 960 */

@media all and (-webkit-min-device-pixel-ratio: 2) and (max-device-width:480px) and (orientation:landscape){  
  .iphone-retina:before{ content:"IPhone Retina landscape"; }
}

@media all and (-webkit-min-device-pixel-ratio: 2) and (max-device-width:320px) and (orientation:portrait){
  .iphone-retina:after{ content:"IPhone Retina portrait"; }
}

/* iPhone 320 × 480 */

@media all and (max-device-width:480px) and (-webkit-max-device-pixel-ratio: 1) and (orientation:landscape){
  .iphone-tft:before{ content:"IPhone TFT landscape"; }
}

@media all and (max-device-width:320px) and (-webkit-max-device-pixel-ratio: 1) and (orientation:portrait){
  .iphone-tft:after{ content:"IPhone TFT portrait"; }
}
Источник

пятница, 27 января 2012 г.

Android: перехват ошибок загрузки страницы в WebView

Для того чтоб узнать, что WebView не смог загрузить страницу, нужно заменить его WebViewClient на свой.

Создаём наследника от класса WebViewClient с обработчиком ошибки загрузки.
/** Custom WebViewClient class  */
private class MyWebViewClient extends WebViewClient {
                       
  /** Handler load page error  */
  @Override
  public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
      // TODO: Action on error
      super.onReceivedError(view, errorCode, description, failingUrl);
  } // onReceivedError()
       
}

И устанавливаем новый WebViewClient в WebView.
this.webView.setWebViewClient( new MyWebViewClient() );

Android: hide scrollbar in webview

В  WebView старых версий Android по умолчанию всегда присутствует полоса скроллинга, даже когда она не нужна и уменьшает рабочую площадь контрола.
Отключение полос прокрутки делается в свойствах .setVerticalScrollBarEnabled и .setHorizontalScrollBarEnabled.

Пример использования:
// Disable scrollbars
this.webView.setVerticalScrollBarEnabled(false);
this.webView.setHorizontalScrollBarEnabled(false);

воскресенье, 22 января 2012 г.

XNA: вывод текста системными шрифтами


XNA предполагает вывод текста только заранее подготовленными растровыми шрифтами. И это правильно. Быстро, не зависимо от ОС, предсказуемые размеры текста.
В моём случае требовалось совершенно противоположное. Произвольный выбор гарнитуры и размера шрифта, и низкие требования к производительности. Задача оказалась довольно трудной. Информации в интернете оказалось мало и она была крайне разрознена.

iText: пишем в PDF по-русски


Задача: создавать PDF-документ с использованием библиотеки iText. При этом пользователь должен сам задавать используемые шрифты, из установленных в системе. Шрифты как TrueType так и Type1.
В iText есть статический класс предоставляющий доступ к системным шрифтам FontFactory. При получении шрифта нужно правильно указать его кодировку. Тут и возникли проблемы. Для ТТ и Т1 кодировки разные, и в .NET нет штатных средств позволяющих отличить ТТ-шрифт от Т1.