Как добавить элементы управления в макет вкладки в Android?

Публикация того, что сработало для меня, в случае, если кто-то идет по дороге, хотя это необычный случай.

Я установил обработчик, чтобы заставить мой веб-хост использовать более высокую версию php, чем их по умолчанию. Там было 5.1, но я хотел 5.6, поэтому у меня было это:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

в моем файле .htaccess.

При попытке запустить мой сайт локально, наличие в нем вызвало php код для вывода в браузер. Удаление этого решения проблемы.

13
задан Vadim Kotov 21 July 2017 в 11:11
поделиться

2 ответа

Поначалу вкладки немного забавны, так как накладываются большие объемы кода, но как только вы проработаете свой путь, они не так уж и плохи. Чтобы заставить вкладки работать, давайте начнем с улучшения вашего XML-файла, а затем мы сможем убедиться, что ваш код для их фактической загрузки правильный.

Прежде всего, ваш XML-файл. Вместо того, чтобы включать все прямо в ваш main.xml, вы должны использовать функцию include . Как следует из названия, это позволяет вам работать с отдельным XML-файлом, а затем включать его в основной файл с помощью одной строки. Это значительно упрощает чтение файла main.xml. Поэтому мы бы изменили ваш файл выше, чтобы он выглядел так:

//No need to change anything above this
<FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <include layout="@layout/tab1"/>
    <include layout="@layout/tab2"/>
    //and however many other tabs you want to include

</FrameLayout>

Затем вам нужно создать tab1.xml, tab2.xml и так далее. Это обычные XML-файлы, поскольку они начинаются с ViewGroup (например, LinearLayout, RelativeLayout), которая содержит любое количество других виджетов. Эти виджеты могут быть такими, как EditTexts, кнопки, пользовательские представления, что угодно. Единственное правило состоит в том, что родительская группа ViewGroup (верхняя) должна иметь уникальный идентификатор, например android: id = "@ + id / someUniqueName" . Вы будете использовать это, чтобы ссылаться на этот конкретный макет / вкладку в своем коде. Так, например, это будет:

tab1.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:id="@+id/tab1Layout"
    android:orientation="vertical">

    <TextView ... />
    <EditText ... />
</LinearLayout>

После этого мы можем взглянуть на ваш код. Я предполагаю, что вы, вероятно, уже получили это, но на всякий случай вот что вам нужно:

public class YourProject extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources();
        TabHost tabHost = getTabHost();

        tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Tab1 title",
                res.getDrawable(R.drawable.logo1)).setContent(R.id.tab1Layout));

        (...)

        //You can also fill tabs with a separate activity like so:
        Intent intent = new Intent(this, YourClass.class);
        tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Another title",
                res.getDrawable(R.drawable.logo2)).setContent(intent));

        tabHost.setCurrentTab(0);
    }
}

Как показано выше, вы можете установить содержимое одной из вкладок как отдельное действие. В этом случае действие определяется так же, как и любое другое со своим собственным классом, макетом и т. Д. Обычно этого не следует делать, а вместо этого просто использовать другое представление (с setContent (R.id.tabXLayout) , но иногда это необходимо. Например, если вы хотите, чтобы на одной из ваших вкладок был список, вам нужно запустить там действие, которое расширяет ListView и включает весь шаблонный код для ListViews.

Надеюсь, это поможет!

35
ответ дан 1 December 2019 в 19:07
поделиться

Вид компоновки в Eclipse может быть немного нестабильным, особенно со сложными компоновками. Немного проб и ошибок может найти узел просмотра, в котором он задыхается.

Что касается дальнейшей разработки макета на основе вкладок, у вас есть два варианта: «быстрый» или «правильный» путь. Во-первых, необходимо адаптировать существующий макет xml, заменив один из TextView на LinearLayout (или какой-либо другой макет), который содержит желаемый контент.

http://google.com/codesearch/p?hl=en#HQNWZ1u2Pig/trunk/HelloLayoutAndroid/res/layout/tab_widget.xml

Однако вкладки обычно используются там, где есть сложное содержание. Для масштабируемости может быть лучше найти TabHost в макете, вызвать newTabSpec (), а затем использовать setContent () для предоставления намерения, которое идентифицирует внутреннее действие, которое предоставляет свой собственный макет.

2
ответ дан 1 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: