Специально для веб-разработчиков выпущен эмулятор Opera Mobile, который предназначен для тестирования сайтов прямо на десктопе!

Скачать Opera Mobile для Windows
Скачать Opera Mobile для Mac
Скачать Opera Mobile для Linux (deb)

Больше информации по этому поводу можно найти здесь.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

A.

ActionBarSherlock – Удобная реализация UI-паттерна ActionBar для Android-приложений – Часть II

Это вторая часть рассказа о библиотеке ActionBar Sherlock, реализующей UI-паттерн ActionBar для Android-приложений, а также еще ряд дополнительных возможностей. В этой части речь пойдет о том, как можно реализовать навигацию в приложении с использованием ActionBar и какие для этого есть возможности в ActionBar Sherlock.

Кастомная навигация

В ActionBar Sherlock есть возможность разместить свой View внутри ActionBar и использовать его для навигации. Так, например, можно разместить RadioGroup и при нажатии на RadioButton внутри нее переходить на нужную страницу в UI.
Пример такого XML-файла для контрола навигации ниже:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:gravity="left|center_vertical"
    android:orientation="horizontal"
    >
    <RadioGroup
        android:id="@+id/radio_nav"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/nav_page_a"
            android:text="Page A"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <RadioButton
            android:id="@+id/nav_page_b"
            android:text="Page B"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </RadioGroup>
</LinearLayout>

В коде Activity необходимо вызвать метод getSupportActionBar().setCustomView() и нужній контрол будет размещен в ActionBar.

public class ActionBarSherlockTestActivity extends SherlockActivity {
	
	static final int [] pages = {
		R.layout.page_a,
		R.layout.page_b
	};
	
	private void setPage(int page_index) {
		setContentView(pages[page_index]);
	}

    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        View customNav = getLayoutInflater().inflate(R.layout.cusom_navigation, null);
        
        ((RadioGroup)customNav.findViewById(R.id.radio_nav)).setOnCheckedChangeListener(new OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
            	int page_index = checkedId == R.id.nav_page_a ? 0 : 1;
            	setPage(page_index);
            }

        });
        
        getSupportActionBar().setCustomView(customNav);
        getSupportActionBar().setDisplayShowCustomEnabled(true);
        setPage(0);
    }
}

На вид получится так:

Вкладки (Tabs)

Возможность работы с вкладками сама по себе очень полезна для отображения ограниченного количества страниц в интерфейсе пользователя (напомню что “ограниченное количество страниц”, согласно UI Design Guidelines это максимум 4 страницы).
Для того, чтобы иметь возможность отображать вкладки в ActionBar нужно указать для ActionBar режим NAVIGATION_MODE_TABS. Делается это посредством метода getSupportActionBar().setNavigationMode(). Затем нужно создать нужное количество объектов Tab с помощью getSupportActionBar().newTab(), заполнить в них информацию о вкладке (например заголовок и listener) и добавить в ActionBar с помощью getSupportActionBar().addTab(tab):

public class TabNavigation extends SherlockActivity i
		mplements ActionBar.TabListener {
    
	private TextView mSelected;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        setContentView(R.layout.tab_navigation);
        mSelected = (TextView)findViewById(R.id.text);

        getSupportActionBar().setNavigationMode(
			ActionBar.NAVIGATION_MODE_TABS);
        for (int i = 1; i <= 3; i++) {
            ActionBar.Tab tab = getSupportActionBar().newTab();
            tab.setText("Tab " + i);
            tab.setTabListener(this);
            getSupportActionBar().addTab(tab);
        }
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction transaction) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction transaction) {
        mSelected.setText("Selected: " + tab.getText());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    }
}

В listener’е можно получать уведомления о переходе на вкладку и выходе с вкладки.
По поводу же смены layout’а, то этот функционал надо реализовывать самостоятельно.
Очень полезной является возможность отображать вкладки второй строкой в ActionBar в портретном режиме и встраивать их в ActionBar в ландшафтном режиме для экономии места.

Навигация списком

Навигацию с помощью выпадающего списка есть смысл использовать для переходов между страницами, когда их больше 4х. Для того, чтобы с помощью ActionBar Sherlock реализовать выпадающий список в ActionBar нужно сделать следующее:

  • Указать Navigation Mode равным NAVIGATION_MODE_LIST
  • Установить адаптер с элементами навигации и listener для получения сообщений о навигации с помощью getSupportActionBar().setListNavigationCallbacks()

В коде это будет выглядеть как-то так:

public class ListNavigation extends SherlockActivity 
		implements ActionBar.OnNavigationListener {
    private TextView mSelected;
    private String[] mLocations;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setTheme(SampleList.THEME); //Used for theme switching in samples
        super.onCreate(savedInstanceState);

        setContentView(R.layout.list_navigation);
        mSelected = (TextView)findViewById(R.id.text);

        mLocations = getResources().getStringArray(R.array.locations);

        Context context = getSupportActionBar().getThemedContext();
        ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
        		context, R.array.locations, R.layout.sherlock_spinner_item);
        list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        getSupportActionBar().setListNavigationCallbacks(list, this);
    }

    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
        mSelected.setText("Selected: " + mLocations[itemPosition]);
        return true;
    }
}

Визуально все это выглядит так:

Функционал по смене лайаута надо тоже реализовывать руками.

Кнопка возврата

Есть также возможность отображения кнопки возврата в предыдущую activity в левой части ActionBar. Для этого использается метод getSupportActionBar().setDisplayHomeAsUpEnabled(). В результате получаем такой внешний вид ActionBar:

Исходный код всех примеров можно скачать вместе с дистрибутивом библиотеки. Примеры, которые идут в поставке покрывают абсолютно все аспекты использования ActionBar Sherlock и, хотя не блещут элегантностью и богатством реализации дополнительных фич, не связанных с API самой библиотеки, позволяют понять что и как можно использовать в своем приложении.

w.

winChain Builder – Windows инструментарий разработчика приложений для iPhone

А ведь вот как оказывается, для того чтобы писать под iPhone не обязательно иметь Мак, а достаточно PC под управлением Windows. Недавно наткнулся на сайт проекта winChain Builder.

winChain Builder – это инструментарий разработчика (набор заголовочных файлов, библиотек, компилятор и несколько дополнительных утилит для создания проекта) на базе Cygwin, который позволяет писать приложения для iPhone в Windows.

Учитывая тот факт, что Apple всеми силами старается навязать принцип “хочешь писать для iPhone – покупай Мак”, удобство winChain Builder, конечно же не так высоко, как хотелось бы.
Ради интереса попробовал создать тестовый проект, но для начала все это добро надо было установить.

Для установки winChain Builder используется самописная утилита (на вид, написанная на C# ;)), которая просто устанавливает Cygwin и копирует заголовочные файлы и библиотеки. Также есть возможность установить Notepad++ как редактора кода с подсветкой синтаксиса Objective-C.

Для того чтобы создать новый проект в дистрибутиве есть специальная утилита – winChain Template Builder. В ней необходимо указать папку, где будут созданы файлы проекта, название проекта, а также имя разработчика. И все. В результате получаем шаблон минимального приложения для iPhone, которое из Cygwin собирается одной командой make.

WinChain Template Builder - Создание проекта для iPhone в Windows
WinChain Template Builder - Создание проекта для iPhone в Windows

Собрать минимальное приложение у меня получилось, а вот оттестировать его, к сожалению, нет. С этим пока проблема, эмуляторов iPhone под Windows с возможностью запускать нативные приложения мне найти так и не удалось, а продажи последней модели iPhone у нас пока не начались, так что ждем-с… 🙂

И по сему у меня небольшая просьба к читателям этого блога: уважаемые товарищи счастливые обладатели iPhone’ов, кто хочет потестировать минимальное приложение, собранное с помощью winChain Builder, так сказать, ради академического интереса? Если есть кто-то, кто может помочь с этим, отпишите мне plz.

Ссылка по теме:

Сайт проекта winChain Builder